超类型/子类型:数据建模

时间:2012-11-08 13:39:36

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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


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

答案 1 :(得分:1)

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