1

我需要创建功能以允许我的注册用户将自己与其他用途相关联并创建一个家庭。我的数据库表如下所示:

db.persons -(Bob、Jane、Timmy 等)

  • ID
  • 姓名
  • 电子邮件

db.persons_persons

  • ID
  • person__id_parent
  • person_id_child
  • 关系类型 ID

db.relationtypes -(配偶、孩子、侄子等)

  • ID
  • 姓名

使用这种结构,我应该能够在persons_persons 表中指定Bob 是Jane 的配偶。db.persons_persons 中的记录看起来像(伪):

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

我意识到这可能会导致一些数据碎片化,因为如果 Bob 和 Jane 结婚了,那么其中一个的孩子必须与另一个相关联。然而,这不是我的问题。我的问题是这个数据库设置对于 cakePHP 应用程序是否“最正确”。

4

1 回答 1

2

首先,CakePHP 会自动将people表格变形为people控制器和person模型,因此您无需调用它persons。然后我会调用查找表relationships而不是persons_persons.

我将调用您的关系表中的字段person_idrelation_id然后relation_type_id在您的表名中添加一个下划线,relationtypes使其变为relation_types.

我认为这更具语义。

您仍然可以使用 hasAndBelongsToMany 关联,并利用 CakePHP(仅限 1.2)提供的自动魔术“ with ”关联来访问 HABTM 表中关系类型的附加数据。

但是,我很想使用:

  • Person有很多Relation
  • Relation属于Person, Relation,RelationType

在您的应用程序中,他人与他们的关系是否暗示了人与人之间的关系?也就是说,如果你找到 Person.id = 1,你可能会得到他们所有的关系,例如 Person.id 2、3 和 4。但是如果你找到 Person.id 2,你不会自动得到 Person.id = 1,除非有另一个在表示该关系的关系表中记录。

为此,您可以设置另一个关联:

  • PersonhasManyRelation1带有外键person_id
  • PersonhasManyRelation2带有外键relation_id
  • Relation属于Person, Relation,RelationType

请注意,您也可以使用 HABTM 实现这种双重关系。

于 2008-10-22T19:04:19.900 回答