【问题标题】:Super Type / Subtype : Data modeling超类型/子类型:数据建模
【发布时间】:2012-10-28 17:00:53
【问题描述】:

我有一个超类型/子类型关系,其中一个子类型没有任何属性,所以我不确定如何建模。我有一个名为 Tracks 的超类型,其中轨道可以是 3 种子类型之一,音频、视频、文本。音频和视频子类型都具有特定的属性,因此将它们放在单独的表中是有意义的。 Text 子类型没有额外的元数据,所以我应该在单独的表中捕获它吗?

【问题讨论】:

    标签: database-design entity-relationship data-modeling subtype supertype


    【解决方案1】:

    如果您的超类型表中有 类型鉴别器1,那么您根本不需要子类型表 - 子类型将由类型鉴别器和它的所有字段都已在基表中。

    否则,子类型表只会复制超级表的 PK(并且没有其他字段)。

    或者,您可以考虑使用"all types in the same table" 策略来实现继承。


    1 只是一个标识其行类型的字段 - 通常是一个整数(或枚举,如果 DBMS 支持它),它从“众所周知”和记录的集合中获取其值.

    【讨论】:

    • Aslo,Nik 应该看看以下标签:“class-table-inheritance”、“single-table-inheritance”和“shared-primary-key”。
    【解决方案2】:

    只需在轨道表中添加一个名为 tracktype 的单独列。在此列中存储轨道的类型,无论它是音频..文本。 轨道表应该包含所有类型的轨道信息,这些信息具有所有类型共有的属性,现在对于每种类型,您都需要单独的表。它们都有自己的标识符和其他属性,标识符应该是轨道表中的主键和外键。您可以避免创建文本表,因为它没有任何属性。但是,如果任何其他表特别依赖于文本表,那么您可以为文本创建一个单独的表,并在该表中只放置一个属性,即文本实体的标识符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      相关资源
      最近更新 更多