0

そのため、曲/CD を管理するための登録パッケージを作成する必要があります。私の問題は、アーティストをトラックにリンクする必要があることですが、それがバンドまたは単なるアーティストである可能性はありますが、どうすればよいかわかりません。

今のところこれがあります:http://imgur.com/V71UX

曲には、バンドまたはアーティスト、またはその両方を追加する可能性があります。アーティストのバンドが存在するのは、そのため、それらの間にテーブルがあるのです。

現在発生している問題は、外部キーのためにそれらのいずれかを空白のままにしておくことができないということですが、それ以上のものであり、これを間違った方法で行っていると感じています。

私を正しい方向に押してくれる人はいますか?

4

2 に答える 2

1
track
    id
    title

artist
    id
    name

band
    id
    name

artist_band
    artist_id
    band_id

artist_track
    artist_id
    track_id

band_track
    band_id
    track_id
于 2012-11-17T18:07:58.723 に答える
1

n_artistandn_bandを許可するものとして sを定義できますNULL。列が の場合、外部キー制約はチェックされませんNULL

次に、CHECK制約を含めることもできます。これらの列の少なくとも 1 つが null でないことを強制できます。または、列の 1 つだけが null にならないようにすることもできます。どちらが正しいかは、ドメインによって異なります。バンドとアーティストの場合、通常は 2 番目が正しいと考えます (つまり、トラックをバンドによるものと定義するか、アーティストによるものと定義します。両方に関連するトラックにどのような解釈を課すべきかわかりません) )

CREATE TABLE T (
     /* Other Columns */
     BandID int null,
     ArtistID int null,
     /* Other constraints */
     constraint FK_Bands FOREIGN KEY (BandID) references Bands (ID),
     constraint FK_Artists FOREIGN KEY (ArtistID) references Artists (ID),
     constraint CK_SingleAssociation CHECK (
          (BandID is null and ArtistID is not null) or
          (BandID is not null and ArtistID is null)
     )
)
于 2012-11-17T18:12:24.487 に答える