Разделите сущности и их свойства
Фильм может иметь название, год и описание. Участник имеет имя и собственный идентификатор. Но актёрская роль относится не только к человеку и не только к фильму: она связывает конкретного участника с конкретной работой. Поэтому полезно сначала перечислить сущности и отношения обычными словами. Один человек может участвовать во многих фильмах, а один фильм включать многих людей. Такое отношение нельзя удобно описать одним полем с перечнем имён, если нужны надёжный поиск и дальнейшее развитие. Название также не является безусловно уникальным ключом. Разные фильмы могут называться одинаково, а отображаемое имя человека может измениться. Стабильный идентификатор помогает отделить сущность от её текущего текстового представления.
Связующая запись хранит конкретное участие
Для отношения многие ко многим удобно использовать отдельную таблицу участия. В ней находятся ссылки на фильм и человека, а также сведения о роли или функции. Такая запись отвечает на вопрос, что именно этот участник делал в этой работе. При этом пара фильм и человек не всегда достаточна как единственное ограничение уникальности. Один человек может выполнять несколько функций или играть несколько ролей. Правило зависит от выбранной модели: эти случаи нужно продумать заранее, а не терять данные ради простой схемы. Внешние ключи помогают не создавать ссылки на отсутствующие записи. Но они не проверяют все смысловые ошибки. Например, корректная ссылка на человека не доказывает, что он действительно участвовал в указанном фильме. Для учебного набора это проверяется вручную, а для реального проекта нужна надёжная работа с источниками.
Проверяйте сценарии на маленьком наборе
Начните с нескольких вымышленных фильмов и участников. Добавьте два одинаковых названия, человека с несколькими функциями и фильм без заполненного описания. Такие случаи покажут ограничения модели лучше, чем десятки идеально одинаковых карточек. Затем сформулируйте запросы: показать все работы участника, найти актёрский состав фильма, отдельно вывести режиссёров. Если для ответа приходится разбирать случайную строку с именами, структура данных может требовать пересмотра. Интерфейс должен отражать реальные различия. Отсутствующее описание не следует заменять выдуманным фактом, а неизвестную дату точной на вид цифрой. Для внешних материалов отдельно проверяют допустимость использования. Собственный учебный набор позволяет отработать логику, не делая копирование чужого содержимого обязательной частью проекта.
Попробуйте на практике
Спроектируйте бумажную модель небольшого вымышленного кинокаталога.
- Создайте три фильма и трёх участников со стабильными условными идентификаторами. Двум фильмам дайте одинаковое название, чтобы проверить различение.
- Добавьте записи участия, включая человека с двумя функциями в одном фильме. Укажите, какое правило уникальности сохраняет обе записи.
- Опишите проверку ссылок на существующие фильмы и людей. Отдельно отметьте, какие смысловые сведения внешние ключи не подтверждают.
- Вручную ответьте на запрос о всех работах одного участника и составе одного фильма. Проверьте, что результат не зависит от уникальности отображаемого имени.
Как проверить результат. Сущности и участие разделены, одинаковые названия не смешиваются, несколько функций сохраняются. Связи отвечают на выбранные запросы без разбора случайных текстовых списков.
Частые вопросы
Можно использовать название фильма как единственный идентификатор?
Это ненадёжно, если названия повторяются или меняются. Лучше отделять стабильный ключ от отображаемого текста.
Внешний ключ гарантирует достоверность всей карточки?
Нет. Он помогает поддерживать структурную связь, но не подтверждает факты о реальном участии или содержании фильма.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.