0

Я разрабатываю базу данных фильмов с обоими записями для актеров и кинематографистов. В настоящее время кредиты актера и режиссера объединяются в одну таблицу, потому что они отличаются только одним столбцом (внешний ключ «role_id» никогда не используется для кредитов режиссера - он всегда равен NULL). По-прежнему ли лучше держать их в одной таблице («movie_credits») или было бы лучше отделить («actor_credits» и «filmmaker_credits»)?Должен ли я иметь две отдельные таблицы, если они отличаются только одним столбцом?

Вот очень простая схема я определил, и я в том числе некоторых примеров в нем данные:

 
movie_credits 
+----+-----------+---------+---------------+----------+ 
| id | talent_id | role_id | identity_id | title_id | 
+----+-----------+---------+---------------+----------+ 
| 1 |   1 | 1  |    1 |  1 | 
| 2 |   2 | 2  |    1 |  2 | 
| 3 |   1 | NULL |    2 |  4 | 
+----+-----------+---------+---------------+----------+ 

talent 
+----+------------+-----------+ 
| id | first_name | last_name | 
+----+------------+-----------+ 
| 1 | Clint  | Eastwood | 
| 2 | Sylvester | Stallone | 
+----+------------+-----------+ 

roles 
+----+---------------+ 
| id |  name  | 
+----+---------------+ 
| 1 | Walt Kowalski | 
| 2 | Rocky Balboa | 
+----+---------------+ 

identities 
+----+--------------+ 
| id | identity | 
+----+--------------+ 
| 1 | actor  | 
| 2 | director  | 
| 3 | producer  | 
| 4 | screenwriter | 
+----+--------------+ 

titles 
+----+-----------------+ 
| id |  name  | 
+----+-----------------+ 
| 1 | Gran Torino  | 
| 2 | Rocky   | 
| 3 | Creed   | 
| 4 | American Sniper | 
+----+-----------------+ 

Если вы видите совершенно другой способ структурирования данных для этого сценария, пожалуйста, сообщите я знаю. Я открыт для любого решения, которое может быть еще более эффективным и масштабируемым.

+0

Моя первая мысль заключалась в том, что, поскольку один и тот же человек может использовать несколько «тождеств» (ваш термин) на разных изображениях или даже на одном и том же изображении, ваше текущее решение было бы более гибким, чем наличие отдельных таблиц для литых & экипаж. Есть возможность для улучшения, но мне нужно будет потратить на это некоторое время. –

+0

Спасибо за ваш ответ. Просто для того, чтобы уточнить, я на самом деле не собираюсь отделять таблицу «талант» с актерами и кинематографистами, а скорее рассматривал разделение «кредитов кино» на две таблицы (у «actor_credits» будет столбец «role_id», а «filmmaker_credits» - столбец «identity_id») –

ответ

0

В принципе, и актер, и кинорежиссер - люди.

Поэтому они должны храниться в одной таблице.

Мы должны избегать нулевой и избыточной базы данных. Но в этом случае добавление дополнительной таблицы будет наноситься большими накладными расходами, чем прибыль при удалении null.

Кроме того, вы можете просто назначить кинематографиста как роль, чтобы избежать нулей. То есть, будет роль кинорежиссера.

+0

Я рассмотрел идею присвоения «кинорежиссера» в роли роли, но столбец role_id должен быть целым числом, поэтому мне нужно добавить «кинематографиста» к таблице ролей, которая очень большая и действительно означало быть списком вымышленных персонажей с различной информацией о каждом из них. –

Смежные вопросы