如何在MS Access中创建(类型,ID)(也称为“多态”) - 外键列?
题
在Ruby-on-Rails中,这被称为“多态关联”。
我的应用程序中有几个可注释
的东西,每个表都在下面:
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
中获取表,来构建一个可以查看如何进行查找的表单?
解决方案
这种技术在SQL世界中通俗地称为“子类化”。有关工作示例(SQL Server语法,但很容易适用于MS Access),请参阅 David Porta的博客。。
在您的方案中,所有注释共有的数据项都位于“注释”表中;每种类型的特定内容都在专门的表格中,例如PhotoComments等。注意FK应该是ID的两列复合加上类型,这是经常被忽略的,但对于参考完整性至关重要,例如:你不希望出现在PersonComments表中出现的作为照片评论的内容。
其他提示
我相信很多人为这类事情制作元表。几乎就像你描述的那样。
不隶属于 StackOverflow