Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да проектираме филмова база данни?

Трябва да направите разлика между атрибути и обекти. Същността е нещо - обикновено съществително. Атрибутът е по-скоро част от описваща информация. На жаргона на базата данни, обект =таблица, атрибут =поле/колона.

Наличието на отделна таблица за определени неща, нека използваме директор, като пример, се нарича нормализиране. Макар че може да е добро при някои обстоятелства, може да е ненужно при други (тъй като обикновено прави заявките по-сложни - трябва да се присъедините към всичко - и е по-бавно).

В този случай не е необходимо да имате таблица с години, тъй като няма други атрибути за година, освен самата година, които бихте съхранили. По-добре е да денормализирате това и да съхраните годината в самата филмова таблица.

Директорът, от друга страна, е различен. Може би ще искате да съхраните собственото име на режисьора, фамилията, датата на раждане, датата на смъртта (ако е приложимо) и т.н. Очевидно не искате да въвеждате рождената дата на режисьора всеки път, когато въвеждате филм, който този човек ръководи, така че има смисъл да има отделен обект за директор.

Дори и да не искате да съхранявате цялата тази информация за директора (вие просто искате името му), да имате отделна таблица за нея (и да използвате сурогатен ключ - ще стигна до това след секунда) е полезно, защото предотвратява печатни грешки и дубликати - ако името на някого е изписано грешно или въведено по различен начин (първи, последен срещу последен, първи), тогава ако се опитате да намерите други филми, които са режисирали, ще се провалите.

Използването на сурогатен ключ (първичен ключ) за таблици обикновено е добра идея. Съпоставянето на цяло число е много по-бързо от съпоставянето на низ. Освен това ви позволява свободно да променяте името, без да се притеснявате за външните ключове, съхранявани в други таблици (идентификационният номер остава същият, така че не е нужно да правите нищо).

Наистина можете да стигнете до този дизайн доста далеч и всичко е въпрос на това да разберете какво искате да можете да съхранявате в него.

Например, вместо да имат един режисьор на филм, някои филми имат няколко режисьора.. така че ще има връзка много към много между филми и режисьори, така че ще ви трябва таблица с например:

films_directors => **filmid, directorid**

Като направим крачка напред, понякога режисьорите също са актьори и обратно. Така че вместо дори да имате маси за режисьор и актьор, можете да имате маса с един човек и да се присъедините към тази маса, като използвате таблица с роли. Таблицата с роли ще заема различни позиции - напр. режисьор, продуцент, звезда, статист, захват, редактор... и ще изглежда по-скоро:

films => **filmid**, title, otherstuff...
people => **personid**, name, ....
roles => **roleid**, role name, ....
film_people => **filmid, personid, roleid**
genre => **genreid**, name, ...
film_genre => **genreid, filmid**

Може също да имате поле role_details в таблицата film_people, което може да съдържа допълнителна информация в зависимост от ролята (напр. името на ролята, която актьорът играе).

Също така показвам жанра като много<>много отношения, защото е възможно един филм да е в множество жанрове. Ако не искате това, тогава вместо таблицата film_genre, филмите ще съдържат само genreid.

След като това е настроено, е лесно да се направи запитване и да се намери всичко, което даден човек е направил, или всичко, което човек е направил като режисьор, или всеки, който някога е режисирал филм, или всички хора, участващи в един конкретен филм. Може да продължи и да продължи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете ред с максимална стойност за колона в MySQL?

  2. Имам нужда от моята PHP страница, за да покажа моето BLOB изображение от mysql база данни

  3. Как да извикам MySQL съхранена процедура от Rails?

  4. Как да напишете MySQL заявка, където A съдържа (a или b)

  5. INSERT ... ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ с КЪДЕ?