Сущность или отношения - PullRequest
0 голосов
/ 19 марта 2019

Я рисую диаграмму ER. Фильмы (название, год и рейтинг) показываются в кинотеатрах (название и город). Фильм можно показывать во многих театрах, а театр может показывать много фильмов.

«Шоу» должно содержать имя_ театра и название фильма. Должно ли "шоу" быть отношением между кино и театром, или я должен нарисовать "показывающее" отношение и связать "шоу" с ним?

Ответы [ 2 ]

1 голос
/ 19 марта 2019

нормализация данных

Где вы заявляете:

«Шоу» должно содержать имя_ театра и название фильма.

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

Например, информация, относящаяся к фильму (включая его название), будет храниться в таблице Movies, а только в этой таблице. Информация, относящаяся к театру, будет храниться в таблице Theatres и только в этой таблице.

В этом случае каждая запись в таблицах Movies и Theatres будет иметь уникальную ссылку с использованием отдельного поля первичного ключа (например, Movie_ID и Theatre_ID), для которого я бы порекомендовал использовать поле с длинным целым числом Autonumber.

С этого момента, когда вы ссылаетесь на фильм или театр в других таблицах, вы будете использовать только соответствующий ID и не будете передавать какую-либо другую информацию.

Это не только оптимизирует размер и производительность вашей базы данных (поскольку целые числа занимают значительно меньше памяти и может быть проиндексирован гораздо более эффективно, чем строки), но вам также нужно хранить данные только в одном месте: если имя фильм меняется, вам нужно всего лишь изменить данные в таблице Movies, и это будет автоматически отражено любым запросом, который ссылается на эту таблицу.


Соединительные столы

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

Такая таблица обеспечивает соединение, на котором встречаются таблицы Movies & Theatres.

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

Например, такая таблица может выглядеть так:

+------------+------------+----------+
| Showing_ID | Theatre_ID | Movie_ID |
+------------+------------+----------+
|          1 |          1 |        2 |
|          2 |          1 |        3 |
|          3 |          2 |        1 |
|        ... |        ... |      ... |
+------------+------------+----------+
0 голосов
/ 19 марта 2019

Для создания отношения n-to-n в реляционной базе данных вам нужна таблица мостов с двумя отношениями, по одному на каждую таблицу.
Прежде всего, Movie и Theaters нуждаются в столбце в качестве первичного ключа (например, Id) (varchar столбцы не соответствуют PKs и FKs с точки зрения производительности). Вам также понадобится таблица моста, как вы могли догадаться (например, Show) с двумя внешними ключами: один MoveiId и один TheaterId.

...