Database design 超级类型/子类型:数据建模

Database design 超级类型/子类型:数据建模,database-design,entity-relationship,data-modeling,subtype,supertype,Database Design,Entity Relationship,Data Modeling,Subtype,Supertype,我有一个超类型/子类型关系,其中一个子类型没有任何属性,因此我不确定如何建模。我有一个超类型叫做Tracks,其中一个曲目可以是3个子类型之一,音频、视频和文本。音频和视频子类型都具有特定的属性,因此将它们放在单独的表中是有意义的。文本子类型没有额外的元数据,所以我应该在单独的表中捕获它吗 如果您的超类型表中有一个类型鉴别器1,那么您根本不需要子类型表-子类型将由类型鉴别器标识,并且其所有字段都已在基表中 否则,子类型表将只复制超级表的PK(并且没有其他字段) 或者,您可以考虑实现继承的策略。

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

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

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

或者,您可以考虑实现继承的策略。



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

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

同样,Nik应该查看以下标记:“类表继承”、“单表继承”和“共享主键”。