如何在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表:PostCommentsPersonComments,`PhotoComments ...等。

现在是一个问题:

如何通过首先从Comments.commentable_type中获取表名称,然后从Comments.commentable_id中获取ID,来构建一个将如何进行查找的表单?

解决方案

我相信许多人会为此类事情创建元表。几乎完全符合描述。

这种技术在SQL世界中俗称"子类化"。有关工作示例(SQL Server语法,但很容易适用于MS Access),请参阅David Porta的博客。

在方案中,所有注释共有的数据项将在"注释"表中;注意,FK应该是ID加上类型的ID的两列化合物,通常会被忽略,但对于此处的引用完整性必不可少。例如,FK应该是ID的两列化合物。我们不希望在PersonComments表中出现键入照片评论的内容。