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

3

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

2个回答

2
如果你的超类型表中有一个类型鉴别器1,那么你根本不需要子类型表——子类型将通过类型鉴别器进行识别,其所有字段已经在基础表中了。
否则,子类型表将只是重复超表的主键(没有其他附加字段)。
或者,你可以考虑"将所有类型放在同一张表中"策略来实现继承。
仅仅是一个字段,用于标识其行的类型 - 通常是一个整数(如果DBMS支持,则为枚举类型),它的值来自于“众所周知”并有文档记录的集合。

2
另外,Nik 应该查看以下标签:"class-table-inheritance"、"single-table-inheritance" 和 "shared-primary-key"。 - Walter Mitty

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接