sql-server – 当两个表非常相似时,它们何时应该组合在一起?

前端之家收集整理的这篇文章主要介绍了sql-server – 当两个表非常相似时,它们何时应该组合在一起?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有活动和照片,然后评论两者.现在,我有两个评论表,一个用于与事件相关的评论,另一个用于照片评论.架构与此类似:
CREATE TABLE EventComments
(
  CommentId int,EventId int,Comment NVarChar(250),DateSubmitted datetime
)

CREATE TABLE PhotoComments
(
  CommentId int,PhotoId int,DateSubmitted datetime
)

我的问题是我是否应该将它们组合起来,并添加一个单独的交叉引用表,但我想不出有办法正确地做到这一点.我觉得这应该没事,你有什么想法?

编辑

根据沃尔特的回答(以及一些轻读),我想出了这个:

CREATE TABLE Comments
(
  CommentId int,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)

结构之间是否存在任何性能差异?对我来说,这似乎有点偏好.我确实看到了第二个模式的好处,如果我想为事件评论或照片评论添加一些特异性,我有一个单独的表来做,如果我想要两者共享一个新的属性,有一个表到添加属性.

解决方法

评论,PhotoComments和EventComments以称为“泛化专业化”的模式相关.此模式由面向对象语言中的简单继承处理.设置一个可捕获相同模式的表模式会更复杂一些.

但它很好理解.快速谷歌搜索“泛化专业化关系建模”将给你几个关于这个主题的好文章.

猜你在找的MsSQL相关文章