модельные ассоциации между фильмами, актерами, режиссерами и т. д. в CakePHP - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь найти наилучший способ настроить связи между таблицами и моделями.

У меня есть таблица movies.В каждом фильме может быть ноль или много актеров, режиссеров, издателей, писателей ... и т. Д.

Я могу просто настроить его, если использую разные таблицы / модели для каждого типа людей ... но это кажетсяunclean.

Моя мысль состоит в том, чтобы использовать People модель / таблицу с HABTM до PeopleType и HABTM до Movie.

Это будет прекрасно работать для связи конкретных людейв кино, но ... как насчет таких людей, как Клинт Иствуд - он будет режиссером для одного фильма, актером для другого и, может быть, даже и тем, и другим.Как фильм узнает, к какому типу он относится?

Просто не могу обернуться, чтобы найти лучший способ сделать это.

Ответы [ 3 ]

1 голос
/ 14 июня 2011

Поскольку человек может быть режиссером в одном фильме, а актер в другом фильме, ваш подход к использованию «типа людей» не выглядит хорошим, поскольку ваша таблица people будет содержать дублирующую информацию для каждого человека, принадлежащего к несколькимтипы. Я бы создал таблицу people_details и специальные таблицы для каждого типа directors, actors, publishers и т. д. с внешними ключами для таблицы people_details.Таблицы directors, actors, publishers также будут содержать любые столбцы, относящиеся только к соответствующему типу людей.

Подводя итог, Actor относится к PersonDetails, Director принадлежит к PersonDetails, Actor HABTM Movie, Director HABTM Movie.

1 голос
/ 14 июня 2011

Еще один способ сделать это:

people_types (id, name)
people_details (id, first_name, last_name, ....)
people (id, person_details_id, person_type_id)
movies_people(id, person_id, movie_id) 
movies (id, title, ...)
0 голосов
/ 13 июня 2011

В вашей таблице соединений: movies_people

Вы можете добавить дополнительное поле для чего-то вроде «роли». Где вы бы конкретно указали людей, действующих в этом фильме. Затем вы можете дважды добавить Клиента Иствуда в таблицу соединений, по одному разу для каждой роли, которую он играет в создании этого фильма.

...