我想知道这是否可以通过
来实现contents orgs folders
id id id
name name title
link
join table - folder_elements
id
element_id
order
内容通过folder_elements
有很多文件夹orgs在folder_elements
中有很多文件夹所以我的问题是,是否可以使用element_id存储content.id或org.id?
亚历
答案 0 :(得分:4)
您所描述的是一种HABTM(HasAndBelongsToMany)关联。您可以按照建议定义模型间关联,但是存在一个非常重要的设计缺陷:您如何考虑将相同ID用于orgs
记录和contents
记录的情况,并希望将它们与同一folder
记录联系起来?在你的加入表中区分这两者是不可能的。
有很多方法可以解决这个问题,但是它们需要更多的程序逻辑或更加混乱的数据库架构,这对可维护性提出了挑战。
更优雅,更强大的解决方案是合理化您的数据库结构。如果没有迫切需要让一个连接表来统治它们,你可以设计你的模型关联:
Content hasMany ContentsFolder belongsTo Folder
Folder hasMany ContentsFolder belongsTo Content
Org hasMany OrgsFolder belongsTo Folder
Folder hasMany OrgsFolder belongsTo Org
这是明确定义的HABTM关联的内部结构,因此您可以在连接表中定义字段。您的contents
和folders
表将保持不变,但您的两个连接表将如下所示:
contents_folders
-> id
-> content_id
-> order
orgs_folders
-> id
-> org_id
-> order
不幸的是,这需要定义五个模型而不是三个模型,但这是CakePHP对象关系建模的局限性。