如何在MS Access中创建(类型,ID)(也称为“多态”) - 外键列?

时间:2008-09-30 17:56:03

标签: ms-access rdbms

在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表:PostCommentsPersonCommentsPhotoComments ,. ..

现在提出问题:

如何通过从Comments.commentable_type获取表名,然后从Comments.commentable_id获取ID来构建一个可以查看如何进行查找的表单?

2 个答案:

答案 0 :(得分:4)

这种技术在SQL世界中通俗地称为“子类化”。有关工作示例(SQL Server语法但很容易适用于MS Access),请参阅David Porta's blog.

在您的方案中,所有注释共有的数据项都位于“注释”表中;每种类型的特定内容都在专门的表格中,例如PhotoComments等。注意FK应该是ID的两列复合加上类型,这是经常被忽略的,但对于参考完整性至关重要,例如:你不希望在PersonComments表中出现类似照片评论的内容。

答案 1 :(得分:0)

我相信很多人为这类事情制作元表。几乎就像你描述的那样。