Sql server 一个主子关系中项目的异构类型

Sql server 一个主子关系中项目的异构类型,sql-server,database,database-design,Sql Server,Database,Database Design,可能以前有人问过这个问题,但没有找到一个好的答案:我有一个主表,它可能与一组异构实体存在1对多的关系。最好用一个例子来描述它: 我有音频播放列表的主表(tb_播放列表)。播放列表可以包含节目集(tb_插曲)、歌曲(tb_歌曲)或音频报告文学(tb_reportae)。据我所知,对于数据完整性而言,最简单的设计是: **tb_playlist** ( playlist_id, audioitem_id [can be episode_id, song_id, reportage_id], aud

可能以前有人问过这个问题,但没有找到一个好的答案:我有一个主表,它可能与一组异构实体存在1对多的关系。最好用一个例子来描述它:

我有音频播放列表的主表(tb_播放列表)。播放列表可以包含节目集(tb_插曲)、歌曲(tb_歌曲)或音频报告文学(tb_reportae)。据我所知,对于数据完整性而言,最简单的设计是:

**tb_playlist** 
(
playlist_id,
audioitem_id [can be episode_id, song_id, reportage_id],
audioitem_type [can be: episode, song, or reportage]
)
上述解决方案显然没有强制执行数据完整性,备选方案可能是空列,如下所示:

**tb_playlist** 
(
playlist_id,
episode_id, 
song_id, 
reportage_id
)
但后者不利于扩展音频项类型

问题是解决这个问题的最好办法是什么


非常感谢

我认为您应该创建问题的实体关系图。我知道你有一个层次结构:一个播放列表可以有许多播放项目。有三种播放项目(我在这里看到层次结构):剧集歌曲报告文学


检查此问题以了解如何处理层次结构:

我无法上载图像,因为我是stackoverflow新手。你的理解是正确的。播放列表可以有多个项目,每个项目可以是来自不同表(歌曲、剧集和报告文学)的外键。三个表中的每一个表都是一个独立的实体,都有自己的属性。我恐怕无法从你的帖子中得到正确的答案。我知道每个解决方案都有利弊。我想保留所有的桌子而不杀戮(我已经受够了世界各地的杀戮)。所以我的问题是:我应该为item_id和item_类型选择单列,还是应该选择可为空的外键。。或者有没有更好的解决方案不包括任何杀戮。。。