Каков наилучший способ создания отношения tableA HABTM tableA для приложения CakePHP? - PullRequest
1 голос
/ 22 октября 2008

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

д.б. чел. - (Боб, Джейн, Тимми и т. Д.)

  • ID
  • имя
  • Адрес электронной почты

db.persons_persons

  • ID
  • person__id_parent
  • person_id_child
  • relationtype_id

db.relationtypes - (супруг, ребенок, племянник и т. Д.)

  • ID
  • имя

С этой структурой я должен быть в состоянии указать, что Боб является Супругой Джейн в таблице person_persons. Запись в db.persons_persons будет выглядеть примерно так (псевдо):

ID | person_parent | person_child | relationtype
1  | Bob           | Jane         | Spouse
2  | Bob           | Timmy        | Child

Я понимаю, что это может привести к некоторой фрагментации данных, так как, если Боб и Джейн женаты, тогда один из детей должен будет быть связан с другим. Однако это не мой вопрос. Мой вопрос заключается в том, является ли эта установка базы данных «наиболее правильной» для использования в приложении cakePHP.

1 Ответ

2 голосов
/ 22 октября 2008

Во-первых, CakePHP автоматически изгибает таблицу people в контроллер people и модель person, поэтому вам не нужно называть ее persons. Тогда я бы назвал справочную таблицу relationships, а не persons_persons.

Я бы назвал поля в вашей таблице отношений person_id, relation_id и relation_type_id, а затем добавил бы подчеркивание в вашем relationtypes имени таблицы, чтобы оно стало relation_types.

Я думаю, что это более семантически.

Вы все еще можете использовать ассоциацию hasAndBelongsToMany и использовать автоматические ассоциации " с ", предлагаемые CakePHP (только 1.2), для доступа к дополнительным данным в таблице HABTM для типа отношения.

Тем не менее, я бы хотел использовать:

  • Person hasMany Relation
  • Relation принадлежит Person, Relation, RelationType

В вашем приложении подразумевается ли отношение людей к кому-то другому? То есть если вы найдете Person.id = 1, вы можете получить все их отношения, например, Person.id 2, 3 и 4. Но если вы найдете Person.id 2, вы не получите автоматически Person.id = 1, если в таблице отношений не было другой записи, представляющей эти отношения.

Чтобы достичь этого, вы можете установить другую ассоциацию:

  • Person hasMany Relation1 с ForeignKey person_id
  • Person hasMany Relation2 with foreignKey relation_id
  • Relation принадлежит Person, Relation, RelationType

Обратите внимание, что вы можете добиться этого двойного отношения и с HABTM.

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