【发布时间】:2012-03-11 08:28:08
【问题描述】:
可能以前有人问过这个问题,但找不到一个好的答案:我有一个主表,它可能与异构实体存在一对多的关系。最好用一个例子来描述它:
我有音频播放列表的主表 (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
)
但后者不利于扩展音频项目类型。
问题是解决这个问题的最佳方法是什么?
非常感谢!
【问题讨论】:
标签: sql-server database database-design