在Ruby-on-Rails中,这称为“多态关联”。
我的应用程序中有几个Commentable
项,每个表都在下面:
Post
id | title | text | author (FK:Person.id) | ...
Person
id | name | ...
Photo
id | title | owner (FK:Person.id) | path | ...
我想添加一个Comments
表,如下所示:
Comments
id | commentable_type | commentable_id | text | author (FK:Person.id)
我理解我以这种方式丢失了数据库的引用完整性,但唯一的另一种选择是拥有多个Comments
表:PostComments
,PersonComments
,PhotoComments
,. ..
现在提出问题:
如何通过从Comments.commentable_type
获取表名,然后从Comments.commentable_id
获取ID来构建一个可以查看如何进行查找的表单?
答案 0 :(得分:4)
这种技术在SQL世界中通俗地称为“子类化”。有关工作示例(SQL Server语法但很容易适用于MS Access),请参阅David Porta's blog.。
在您的方案中,所有注释共有的数据项都位于“注释”表中;每种类型的特定内容都在专门的表格中,例如PhotoComments等。注意FK应该是ID的两列复合加上类型,这是经常被忽略的,但对于参考完整性至关重要,例如:你不希望在PersonComments表中出现类似照片评论的内容。
答案 1 :(得分:0)
我相信很多人为这类事情制作元表。几乎就像你描述的那样。