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

时间:2012-03-10 23:38:01

标签: sql-server database database-design

可能之前已经提出过这个问题,但是找不到一个好的答案:我有一个可以与异构实体建立一对多关系的主表。最好用一个例子来描述它:

我有音频播放列表的主表(tb_playlist)。播放列表可以包含节目集(tb_episode),歌曲(tb_songs)或音频报道(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
)

但后者不适合扩展音频项目类型。

问题是解决这个问题的最佳方法是什么?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我认为您应该创建问题的实体关系图。我知道你有一个层次结构: PlayList 可以有很多 PlayListItems 。有三种 PlayListItems (这里是我看到的层次结构):剧集歌曲报道

检查此问题以了解如何处理层次结构:What is the best database schema to support values that are only appropriate to specific rows?