我有 Activity 和照片,然后都有评论。现在,我有两个评论表,一个用于与事件相关的评论,另一个用于照片评论。架构与此类似:
CREATE TABLE EventComments
(
CommentId int,
EventId int,
Comment NVarChar(250),
DateSubmitted datetime
)
CREATE TABLE PhotoComments
(
CommentId int,
PhotoId int,
Comment NVarChar(250),
DateSubmitted datetime
)
我的问题是是否应该合并它们,并添加一个单独的交叉引用表,但是我想不出一种适当的方法。我认为应该没问题,您对此有何看法?
编辑
根据Walter的回答(和一些浅读),我得出了以下结论:
CREATE TABLE Comments
(
CommentId int,
Comment NVarChar(250),
DateSubmitted datetime
CONTRAINT [PK_Comments] PRIMARY KEY
(
CommentId
)
)
CREATE TABLE EventComments
(
CommentId int,
EventId int
)
CREAT TABLE PhotoComments
(
CommentId int,
PhotoId int
)
ALTER TABLE EventComments ADD CONSTRAINT FK_EventComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId)
ALTER TABLE PhotoComments ADD CONSTRAINT FK_PhotoComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId)
这些结构之间确实存在性能差异吗?对我来说,似乎有点偏爱。我确实在第二个方案中看到了好处,如果我想为事件注释或照片注释添加一些特殊性,则可以使用一个单独的表来完成,如果我要共享一个新属性,则可以使用一个表来完成。添加新属性。
最佳答案
评论,照片评论和事件评论以称为“通用化专门化”的模式关联。此模式通过面向对象语言中的简单继承来处理。设置将捕获相同模式的表的架构要复杂一些。
但这是众所周知的。谷歌快速搜索“泛化特化关系建模”将为您提供有关该主题的好几篇文章。
关于sql-server - 当两个表非常相似时,应何时将它们合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1478112/