2

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

4

2 回答 2

2

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

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

或者,您可以考虑“同一张表中的所有类型”策略来实现继承。


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

于 2012-11-08T18:41:07.850 回答
1

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

于 2012-11-19T09:48:58.647 回答