具有层次结构的类表继承

时间:2010-08-25 17:00:55

标签: database database-design database-management

我有3种数据类型 - a)公共列b)层次结构 - 并且想知道如何设计数据库。

让我们说在顶层,有一个讨论。其中包括DiscussionMessages,Files和Comments。它们都有共同的字段(UserID,CreateDate,Text),但也有唯一的列(FileName,ContentType等)。注释可以与任何类型(甚至其他注释)相关联,与文件相同。

在这里查看一些问题之后,我想我想要类表继承 - 一个基表(DiscussionParts)来存储公共元素,然后是每种数据类型的特定表。

  

DiscussionParts :PartID,DiscussionID,ParentID,PartType(M,F,C),UserID,Text,CreateDate

     

消息:MessageID,PartID,Title

     

文件:FileID,PartID,FileName,ContentType

     

评论:CommentID,PartID,来源

ParentID列用于跟踪层次结构。 DiscussionID使得用户可以在一个简单的查询中搜索他/她的所有讨论文本。

这是具有层次结构的类表继承的推荐设计吗?

1 个答案:

答案 0 :(得分:1)

我建议根据实体和可能的功能而不是类重新进行此操作。原因是数据库不执行“类”和“继承”,并且以这种方式进行转换会导致设计效率低下。

听起来,“......在最高层,有一个讨论。”意味着这是你的顶级表,可能有一个ID,标题,也许还有一些描述消息内容的文本。

从那里,您的Messages表是Discussions的子项,其中DiscussionId为外键,其messageId,Title,text等。听起来你正在建立一个论坛,到目前为止一直很好。

评论有点棘手。据推测,评论被添加到消息中?这意味着您的Comments表具有消息的外键,以及它自己的CommentId和一些文本。

但是从问题我无法解决文件进来的问题。它们是否作为一个整体附加到讨论中?一个消息?还是评论?无论答案是什么,都要将Files表作为相应表的子项。

所以你的层次结构不是类,而是表,看起来像:

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