#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
. Если вы хотите перечислить все страны, участвующие в фильме (многие: многие сопоставления), вам нужна дополнительная таблица.