【发布时间】:2010-12-01 11:26:19
【问题描述】:
我有活动和照片,然后两者都有。现在,我有两个 cmets 表,一个用于与事件相关的 cmets,另一个用于照片 cmets。 Schema 与此类似:
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)
这些结构之间真的存在性能差异吗?对我来说,这似乎有点偏好。我确实看到了第二种模式的好处,如果我想为事件 cmets 或照片 cmets 添加一些特殊性,我有一个单独的表来执行此操作,如果我希望两者共享一个新属性,则有一个表可以添加新属性。
【问题讨论】:
标签: sql-server database-design data-modeling normalization