Являются ли отношения между многими абсолютно необходимыми в этом случае? - PullRequest
1 голос
/ 26 января 2012

У меня есть следующие модели: Актив и Пользователь Активы принадлежат пользователю Пользователь имеет много активов

Простая модель базы данных будет выглядеть так

USER
id
name


ASSET
id
name
user_id

Теперь вопрос действительно о таблице загрузок, чтобы смоделировать тот факт, что пользователи могут загружать много ресурсов, а ресурсы могут загружать многие пользователи.

В cakePHP это будет таблица users_assets с простой моделью, подобной этой:

USERS_ASSETS (alias Downloads)
id
user_id
asset_id

Но это сбивает с толку, потому что если вы используете функцию выпечки торта, вам придется назначить более одного отношения между пользователями и активами, отношения, описанные выше, и новые отношения HABTM: то есть ::

assets belongsTo Users | users hasMany assets
assets hasAndBelongsToMany user | users hasAndBelongsToMany assets

Почему я не могу просто иметь таблицу загрузок со связями:

user belongsTo downloads | downloads hasMany Users
asset belongsTo downloads| downloads hasMany Assets

DOWNLOADS:
id
user_id
asset_id

Полагаю, я не уверен, нормально ли определять несколько отношений для данного набора моделей.

Какой вариант лучше и почему - использовать таблицу users_assets с псевдонимом загрузок, чтобы сообщить торт о взаимосвязи HABTM. Или лучше использовать таблицу с именем downloads без отношения HABTM.

1 Ответ

1 голос
/ 26 января 2012

В вашем случае я бы создал отдельную модель загрузки и имел бы "user hasmany downloads", "downlload assignstore", "download assetsto asset" и "asset hasmany downloads".Это то, что habtm означает в любом случае.Таким образом, модель загрузки может иметь другие интересные данные, такие как дата и время загрузки.Я не стал бы беспокоиться об отношении habtm, если бы вам не нужно было очень просто получать доступ к списку ресурсов, загруженных пользователем, и не заботиться о таблице ссылок. Таким образом, таблицу ссылок можно называть как угодноВы можете вызвать itndownloads и по-прежнему придерживаться привычного способа действий.

Что касается вашего другого вопроса, да, вы можете иметь несколько отношений с моделью.Вам просто нужно использовать разные ключи.Например, актив может «принадлежать» владельцу, который является пользователем, а также «принадлежать» редактору, который является другим пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...