我有活動和照片,然後評論。現在,我有兩張評論表,一張是與事件相關的評論,另一張是照片評論。模式與此類似:當兩張表非常相似時,他們應該何時合併?
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)
真的有結構之間的性能差異?對我而言,這似乎有點偏好。我確實在第二個模式中看到了好處,如果我想爲事件註釋或照片註釋添加一些特殊功能,我有一個單獨的表來執行此操作,並且如果我想同時共享一個新的屬性,則有一個表添加新的屬性。
頁面上最好的純設計評論,恕我直言。 – Rap 2009-09-25 16:20:06
我做了一些研究並更新了問題。感謝您的輸入 – scottm 2009-09-25 18:05:26
我非常不同意這個答案;在實踐中,你在乞求不一致的,混亂的數據。如何刪除評論?我經常看到它的設置就像ScottM在修改後的問題中實現的一樣,幾乎總是留言留在評論中,但是EventComments或PhotoComments中的相關記錄被刪除,並且留下了留言中的懸掛記錄。 – JasonFruit 2010-07-21 20:49:20