如何在MS Access中创建(类型,ID)(又名"多态")外键列?
时间:2020-03-06 14:56:14 来源:igfitidea点击:
在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,来构建一个将如何进行查找的表单?
解决方案
我相信许多人会为此类事情创建元表。几乎完全符合描述。
这种技术在SQL世界中俗称"子类化"。有关工作示例(SQL Server语法,但很容易适用于MS Access),请参阅David Porta的博客。
在方案中,所有注释共有的数据项将在"注释"表中;注意,FK应该是ID加上类型的ID的两列化合物,通常会被忽略,但对于此处的引用完整性必不可少。例如,FK应该是ID的两列化合物。我们不希望在PersonComments表中出现键入照片评论的内容。