什么是最好的方式来创建一个表a HABTM表a的关系对于一个程序?
-
03-07-2019 - |
题
我们需要创造能让我的注册用户副本身与其他用途而创建一个家庭。我的数据库表看起来像这样的东西:
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_id
和 relation_type_id
, 然后添加下划线在你 relationtypes
表名称,因此它成为 relation_types
.
我认为这更多的是语义。
你仍然可以使用一个hasandbelongstomany关联的关联,以及使用自动"与"协会提供的Cake(1.2)的访问的另外数据中HABTM表对于有关类型。
然而,我会被诱惑到使用:
Person
hasManyRelation
Relation
belongsToPerson
,Relation
,RelationType
在你的程序,是一个人的关系所隐含的其他人的关系到他们吗?I.e。如果你找的人。id=1你可能会得到他们所有的关系,例如人。id2、3和4。但如果你找的人。id2,你不会自动得到的人。id=1,除非有另一个记录在的关系表示的关系。
要实现这一点,可以设立另一个协会:
Person
hasManyRelation1
与外键person_id
Person
hasManyRelation2
与外键relation_id
Relation
belongsToPerson
,Relation
,RelationType
注意,你可以实现这一双重关系与HABTM。