Как связать таблицы, которые разделяют некоторые общие значения

#mysql #sql #database-design

#mysql #sql #база данных-дизайн

Вопрос:

Я пытаюсь найти хорошее решение для следующего сценария.

Допустим, у меня есть таблица с именем Movies, которая содержит следующие столбцы.

  • ID
  • Название
  • Категория
  • Выпущенные страны

Тогда у меня есть другая таблица с именем Category, которая содержит следующие столбцы.

  • ID
  • Имя

Категориями будут ужасы, триллеры и анимация

Наконец, у меня есть таблица с именем Countries, которая содержит страны

  • ID
  • Имя

Список стран будет Канада, США, Мексика и Бразилия.

Что мне делать, если я хочу иметь фильм с несколькими категориями и странами, но не все из них для каждого фильма??

Например:

  • Фильм 1 — это ужас и триллер. Он выпущен в США, Канаде и Мексике
  • Фильм 2 — это анимация. Он выпущен в Мексике и Бразилии.

Каким образом я должен связать эти три таблицы? Есть ли какая-либо другая таблица, которую я должен добавить сюда?

Комментарии:

1. Ваша текущая схема базы данных не нормализована. Таблицы категорий и стран должны иметь идентификатор фильма, которого у них в настоящее время нет.

2. В этом случае у меня будут повторяющиеся категории и страны в категориях и странах для каждого из фильмов, которые соотносят каждую категорию и страну соответственно, верно?

3. Например, таблица категорий должна иметь два столбца: один для идентификатора фильма, другой для идентификатора категории. Другими словами, один фильм может иметь несколько записей в таблице категорий. Сделайте то же самое для стран.

Ответ №1:

добавление таблиц:

  • Movie_Category (Movie_ID, Category_ID)
  • Movie_Countries (Movie_ID, Country_ID)

Комментарии:

1. Какова будет связь между этими двумя таблицами и таблицами категорий и стран?

2. 1: n между фильмом и категорией, 1: n между фильмом и страной

3. отношения 1: n не нуждаются в дополнительных таблицах. Все, что вам нужно, это дополнительный столбец. Например, если фильм снят ровно в одной стране, добавьте country_code в таблицу 2 буквы Movies . Если вы хотите перечислить все страны, участвующие в фильме (многие: многие сопоставления), вам нужна дополнительная таблица.