2011-11-26 106 views
1

在我正在開發的項目中,我有幾個「常見對象」跨越並關聯了其他幾個表。「通用概念」的數據庫設計

例如,在對象「Comment」處考慮。它應該適用於許多不同的對象:照片,動作,事件...並且它始終具有相同的結構(作者,文本,插入時間,...)

我採用的第一個解決方案是對每種評論都有單獨的表格:PhotoComments,EventComments,並將這些表格與相關對象關聯(例如)一個photo_id列與一對多關係。

第二個(和當前的)包含一個單獨的評論表(每個都有自己的ID)並且具有所需的「多對一」支持表以將這些評論與他們的照片。

有這樣的設計有什麼缺點嗎?

+0

你的問題針對哪個設計? – Oded

+0

到第二個 – Onip

回答

0

如果您加載評論所屬的數據,然後查找分配給它的評論,那麼單個評論,一對多評論會很好。

如果您想要查找評論所屬的實體,則一對多表格會變得非常痛苦,因爲您必須查看所有鏈接表以查找評論所屬的內容。當然,你可以在你的評論表中添加另一列來表明它屬於哪個實體類型,然後你就知道要去哪個鏈接表。從事物的聲音中,您的評論不屬於多個實體,這消除了複雜性。

我會跟單comments表去(也許移動筆者爲它自己的表,所以你可以很容易地看到哪些意見屬於作者之一,而不要重複每個記錄中作者信息)

+0

由於這將是產品的演示,我認爲我會堅持已經實施的「通用表」設計。 – Onip

0

我能想到的一個缺點來自桌面鎖定。

說有查詢的照片評論。根據您的設置,表格可能會鎖定以檢索此照片評論。然後再說一個動作評論的另一個查詢。如果該表被鎖定爲照片評論,則此新查詢必須等待它完成。

根據表的大小以及對其中的數據進行查詢的頻率,此表可能會成爲架構中的性能瓶頸。如果你不認爲這會成爲一個問題,那麼做單個表格可以更容易維護。但是,如果評論會有很多爭議,那麼拆分表格會幫助你。