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

StackOverflow https://stackoverflow.com/questions/154209

  •  03-07-2019
  •  | 
  •  

在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表中出现的作为照片评论的内容。

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top