【问题标题】:Table with hierarchy or multiple tables?具有层次结构的表还是多个表?
【发布时间】:2013-09-10 09:37:31
【问题描述】:

我正在为某个应用程序设计数据库模型,并且我有一张表Post 属于某个类别。好的,Category 在逻辑上将是另一个表。

但是,更多的类别属于某个超级类别或领域或领域,我的问题是下一个:

是否为超级类别或域创建其他表,或者在表Category 中使用一些指向父级的键组合来执行此层次结构。

希望我清楚问题?

PS.我知道我可以用两种解决方案来解决这个问题,但是使用第一个解决方案而不是第二个解决方案有什么好处,相反。

谢谢

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    这取决于:如果几乎每个类别都有父级,您可以将父级序列添加为列。然后你的category 表看起来像

    +--+----+------+
    |ID|Name|Parent|
    +--+----+------+
    

    这种表示的问题在于,只要层次结构不是循环的,某些类别就没有父级。此外,一个类别只能有一个父级。

    因此,我建议使用category_hierarchy 表。附加表:

    +-----+------+
    |Child|Parent|
    +-----+------+
    

    这种方法的缺点是几乎每个category 都会被重复。因此,如果几乎所有类别都有父类别,则冗余将大致随着该数量而增加。但是,如果关系非常稀疏,则可以节省空间。此外,使用智能连接将防止第二个表示占用较长的执行时间。例如,您可以定义一个视图来处理此类请求。

    此外,在某些情况下,第二种方法可以提高速度。例如,如果您并不总是需要层次结构(例如,将序列映射到类别名称时),则在 category 表中的查找会更快,这仅仅是因为该表更紧凑,因此更多部分表将被缓存。

    【讨论】:

      猜你喜欢
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多