4

在 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,然后从获取 id Comments.commentable_id

4

2 回答 2

4

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

在您的场景中,所有评论共有的数据项将在您的 Comments 表中;特定于每种类型的任何内容都将在专用表中,例如 PhotoComments 等。请注意,FK 应该是 ID 和类型的两列复合,这经常被忽略,但对这里的引用完整性至关重要,例如你不想要作为照片评论出现在 PersonComments 表中的内容。

于 2008-10-01T08:32:43.263 回答
0

我相信很多人都会为这类事情制作元表。和你描述的差不多。

于 2008-09-30T18:04:50.837 回答