2010-08-25 122 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