【问题标题】:Class Table Inheritance with a hierarchy具有层次结构的类表继承
【发布时间】:2010-08-25 17:00:55
【问题描述】:

我有 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、标题

文件:FileID、PartID、FileName、ContentType

评论:评论ID、PartID、来源

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

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

【问题讨论】:

    标签: database database-design database-management


    【解决方案1】:

    我建议根据实体和可能的功能而不是类来重铸它。原因是数据库不做“类”和“继承”,以这种方式转换它们会导致设计效率低下。

    这听起来像,“......在顶层,有一个讨论。”意味着这是您的顶级表格,大概有一个 ID、标题,也许还有一些描述消息内容的文本。

    从那里开始,您的 Messages 表是 Discussions 的子表,以 DiscussionId 作为外键,它的 messageId、Title、文本等。听起来您正在建立一个论坛,到目前为止一切顺利。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多