2010-08-25 238 views
0

我有3種數據類型與 - a)公共列b)層次結構 - 並想知道如何設計數據庫。類表繼承與層次結構

比方說,在頂層,有一個討論。在那裏,有DiscussionMessages,文件和評論。它們都有共同的字段(UserID,CreateDate,Text),但也有唯一的列(FileName,ContentType等)。註釋可以與任何類型(甚至其他註釋)相關聯,並且與文件相同。

在看了一些關於這裏的問題後,我想我想要Class Table Inheritance--一個基本表(DiscussionParts)來存儲公共元素,然後是每個數據類型的特定表。

DiscussionParts:PARTID,DiscussionID,PARENTID,PartType(M,F,C),用戶ID,文本,CREATEDATE

消息:郵件ID,PARTID,標題

文件 :FileID,PartID,FileName,ContentType

評論:CommentID,PartID,Source

ParentID列用於跟蹤層次結構。 DiscussionID使用戶可以在一個簡單的查詢中搜索他/她的所有討論文本。

這是帶有層次結構的類表繼承的推薦設計嗎?

回答

1

我建議用實體和可能的功能而不是類來重寫這個。原因是數據庫不會執行「類」和「繼承」,並且以這種方式進行投射會導致設計效率低下。

聽起來像「......在頂層,有一個討論。」意思是這是你的頂級表,大概有一個ID,標題,或許是描述這個信息的文字。

從那裏,您的Messages表是討論的子元素,其中DiscussionId作爲外鍵,其messageId,標題,文本等。聽起來你正在建立一個論壇,到目前爲止這麼好。

評論有點棘手。大概評論被添加到消息?這意味着你的評論表有一個消息的外鍵,加上它自己的CommentId和一些文本。

但是從這個問題我不能確定文件是從哪裏來的。它們是作爲一個整體加入討論嗎?一個消息?還是評論?無論如何回答,請將「文件」表格設置爲適當表格的子項。

所以,你的層次是不類,但表,看起來像:

Discussions ----> Messages ---> Commnts