我们需要创造能让我的注册用户副本身与其他用途而创建一个家庭。我的数据库表看起来像这样的东西:

db。人 -(鲍勃,简,提米,等等)

  • id
  • 名称
  • 电子邮件

db。persons_persons

  • id
  • 人__id_父
  • person_id_child
  • relationtype_id

db。relationtypes -(配偶、子女、侄儿,等等)

  • id
  • 名称

与这种结构,我应该可以指定这Bob是一个配偶的简在persons_persons表。记录在数据库。persons_persons会看起来像(伪):

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

我意识到这可能会导致一些碎片的数据,因为如果鲍勃和珍妮结婚了,那个孩子一个就必须与其他。但是这不是我的问题。我的问题是,是否这个数据库的设置是最正确的'用于在程序.

有帮助吗?

解决方案

首先,Cake会automatigally活用一个 people 表进入一个 people 和一个控制器 person 模型,所以你不需要叫它 persons.然后我会打电话的查找表 relationships 而不是 persons_persons.

我会打电话领域之间的关系表 person_id, relation_idrelation_type_id, 然后添加下划线在你 relationtypes 表名称,因此它成为 relation_types.

我认为这更多的是语义。

你仍然可以使用一个hasandbelongstomany关联的关联,以及使用自动""协会提供的Cake(1.2)的访问的另外数据中HABTM表对于有关类型。

然而,我会被诱惑到使用:

  • Person hasMany Relation
  • Relation belongsTo Person, Relation, RelationType

在你的程序,是一个人的关系所隐含的其他人的关系到他们吗?I.e。如果你找的人。id=1你可能会得到他们所有的关系,例如人。id2、3和4。但如果你找的人。id2,你不会自动得到的人。id=1,除非有另一个记录在的关系表示的关系。

要实现这一点,可以设立另一个协会:

  • Person hasMany Relation1 与外键 person_id
  • Person hasMany Relation2 与外键 relation_id
  • Relation belongsTo Person, Relation, RelationType

注意,你可以实现这一双重关系与HABTM。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top