2012-03-10 1 views
0

おそらくこれは以前に尋ねられましたが、良い答えが見つかりませんでした。異種エンティティとの1対多数の関係にあるマスターテーブルがあります。1つのマスター - 子関係にある異種タイプのアイテム

私はオーディオ再生リスト(tb_playlist)のマスターテーブルを持っています。プレイリストには、番組エピソード(tb_episode)、曲(tb_songs)または音声レポート(tb_reportae)が含まれている可能性があります。明らかに、以下のように交互にNULL列であるかもしれない、データの整合性を強制しません

**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 
) 
私はデータの整合性のために最善ではないことを知っている簡単な設計は、このようなものです

ですが、後者はオーディオアイテムタイプを拡張するのに悪いです。

質問は、この問題を解決する最良の方法は何ですか?

ありがとうございます!

答えて

0

問題のエンティティリレーションシップダイアグラムを作成する必要があります。そこに階層があると分かります。プレイリストは、多くの場合、PlayListItemsを持つことができます。 エピソードルポルタージュPlayListItemsの3種類が(私は階層構造を見るのはここです)があります。

は、階層を処理する方法を確認するには、この質問をチェックしてください:What is the best database schema to support values that are only appropriate to specific rows?

+0

私はStackOverflowのために新しい午前として画像をアップロードすることはできませんよ。あなたの理解は正しいです。プレイリストは複数のアイテムを持つことができ、各アイテムは異なるテーブル(ソング、エピソード、レポート)からの外部キーになります。 3つのテーブルの各テーブルは、独自の属性を持つ別個のエンティティです。 – Lamar

+0

私はあなたの記事から正解を得ることができなかったのですが、恐れています。私は、それぞれの解決策について賛否両論があることを知っています。私は死ぬことなくすべてのテーブルを保持したい(私は世界中のすべてを殺していた)。だから私の質問:私はitem_typeとitem_idのための単一の列のために行く必要がありますか、またはnullable外国キーに行く必要があります..または任意の殺害を含まないさらに良いソリューションです... – Lamar

関連する問題