2013-08-29 4 views
1

Im пытаясь выяснить, что соответствующий способ настройки базы данных будет дан такой сценарий:реляционных баз данных и нормализации для реляционных таблиц

Я создаю базу данных Movie/TV. У фильма может быть несколько жанров, а телешоу может иметь несколько жанров.

По сути то, что я интересно, если у вас есть таблица Movie, тумба под телевизором ... вы должны:

  1. есть таблица MovieHasGenre, состоящая из внешнего ключа таблицы Movie и регулярного поля для жанр значение

    или

  2. есть таблица MovieHasGenre и таблицу жанр где MovieHasGenre имеет два внешних ключей, один указывая на фильм в таблице Movie другой, указывающий на жанр в таблице жанр

Im действительно не уверен, что это что-то стандартизованное или просто связано с предпочтением. У нас есть проблемы со скоростью, так как кажется, что удаление таблицы жанра - это еще одно объединение.

ответ

1

Go с опцией 2.

Это полезно хранить каждый жанр один раз, и сделать ссылку на него через стол MoveHasGenre. Таким образом, если у вас есть другие столбцы атрибутов для жанра, вы не должны хранить эти атрибуты избыточно на каждой строке, в которой упоминается данный жанр \

Re ваш комментарий:.

Другое дело, если вы хотите изменить написание жанра и применить его ко всем строкам, которые ссылаются на него, без каких-либо шансов вы их забудете.

+0

Я вижу это для чего-то вроде Cast, где вам может понадобиться информация о актерском составе (например, возраст и т. Д.), Но я все еще пытаюсь понять, почему я хотел бы сделать это для чего-то вроде жанра, где действительно не более того, чтобы добавить в таблицу жанра (по крайней мере, ничего не видно) - конечно, я даю конкретный пример базы данных Кино, но применяю это рациональное вообще – Kairan

0

Вариант 2 - это то, как вы нормализуете свои данные.

Проблемы с вариантом 1 - это избыточность данных. Против использования нескольких байтов данных для хранения и INT вы используете потенциально большое значение для хранения имени жанра. Другая проблема, такая как Билл, заключается в том, что у вас есть потенциал для несогласованности данных, так как вам придется обновлять несколько полей, если жанр изменится вместо одного столбца.

Однако, у вас в варианте 1 есть денормализованная версия варианта 2, которая будет иметь преимущества по производительности по сравнению с вариантом 2, но я бы предположил, учитывая, по-видимому, небольшой размер этой базы данных, что не будет значительной производительности изменение.