@mShpakov

Как правильнее спроектировать модель фильма?

Входные данные (если имеет значение):
- бд: postgres 10
- проект: php 7.1 + laravel 5.5 + voyager

Задача:
Распределить модель фильма на несколько таблиц максимально грамотно.
Модель:
- id
- slug (уникален)
- name
- categories (связь с моделью категорий серез 3 таблицу, тут все понятно)
- genres (почти то же самое, что и категории, связь аналогична)
- directors (связь так же через 3 таблицу)
- year 
- poster
- excerpt (краткое описание)
- body (описание фильма)
- seo title
- seo keywords
- seo description

Вопросы:
1) Думаю свойства seo * вынести в таблицу film_meta:
- film_id
- seo title
- seo keywords
- seo description

Правильно ли?
2) Куда вынести эти свойства? Или нормальная практика хранить их в этой же таблице?
- year 
- poster
- excerpt (краткое описание)
- body (описание фильма)


P.S.
Встречал где-то вид типа:
- parent_model_id
- key
- value

Но мне кажется это не очень удобным и правильным
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
@immaculate
Программист-путешественник
Для начала необходимо изучить нормальные формы. В идеале, таблица должна быть в третьей нормальной форме.

В вашем случае нет необходимости выносить атрибуты из 1) и 2) в отдельные таблицы, так как они не нарушают требования нормальных форм.

Вариант 3) называется Entity-attribute-value model, и он в данном случае абсолютно точно не нужен. Более того, это огромный костыль, к которому можно прибегать лишь в исключительных случаях.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kapitan7830
1, 2 - я бы оставил в основной таблице, у вас же не будет несколько сео-заголовков или годов выпуска к одному фильму, а вот categories и т.п. вообще убрал бы и прописал отношения в 3й таблице.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы