2010-11-29 16 views
0

これを把握しようとすると脳の崩壊が起こります。私が持っていることは、いくつかのデータベースのようなものです:SQL Server:多対多の関係

tblGenre

genreID 
genreName 

tblArtist

artistID 
artistName 
genreID 

tblAlbum

albumID 
albumName 
artistID 

すべてがうまくいっていて、うまく動作しています。今質問に...

私が理解しようとしているのは、複数の名前を持つアーティストをリンクする方法です。私。アーティストの「Prince」。私は彼のアルバムを持っています。彼は3つの異なるバンドの下でカタログを作成します。 (artistID = 43)...

このように、私がアーティスト "Prince"を検索すると、アーティストIDが5、他の2つのバンドをどのようにリンクすることができますか?個別のデータベースを作成すると、各artistID(つまり5,17,43)のコンマ区切りの値がありますか、これを行う簡単な方法はありますか?

私は、データベースのすべてのアルバムでプレイしたアルバムのレベルまでは行きたくないので、複数のバンドを持つアーティストのリンクを作成したいだけです。私は "一緒に夢中になりたい"と思っています...

  • トム・ペティ(クラシックロック)

    • トム・ペティ&ハートブレイカーズ(クラシックロック)
    • トム・ペティ&ハートブレイカーズ(サウンドトラック)
  • 王子(ファンク)

    • プリンス&新発電(ファンク)
  • マーク・ノップラー(クラシックロック)

    • マーク・ノップラー(サウンド)
    • ダイアー海峡(クラシックロック)入力用

おかげ。

+3

引用:「各アーティストIDのカンマ区切り値(つまり5,17,43)を持つ別個のデータベースを作成してもよろしいですか?」というようなことは絶対にしないでください。 –

+1

私はあなたのデータモデルには、現在のところ、あなたが現在持っているテーブルよりも多くの関係(「関係」、BTWではない)が存在すると思います。アーティストは複数のジャンルのアルバムを持っています(例えば、マーク・ノープラーは国のアルバムを作っていませんか?).2人以上のアーティストがアルバムに貢献しています。 – onedaywhen

答えて

0

tblRelatedArtistsのようなテーブルを作成します。このテーブルには、.artistIDと.relatedArtistIDの2つの列があります。

データベースにクエリを実行すると、tblArtist where .artistID is in (select relatedArtistID from tblRelatedArtists as innerArtists where innerArtists.artistID = outerArtists.artistID)に内部結合できます。

3

次の2つの選択肢があります。

1)ARTISTIDはARTISTS_ALIASESテーブルの外部キーで、あなたのALBUMテーブルにartist_aliasidを持っているでしょうので、あなたは何の下に知っているだろうARTISTSテーブルとARTISTS_ALIASESテーブルを、アーティストがそのアルバムに登場した名前。 EMPLOYEE BOSSテーブルのような再帰を()を使用して、または

2)単一ARTISTS:ARTISTIDとprimaryartistidが同じである場合

   artistid 
       artistname 
       primaryartistid (references artistid in this table 

、あなたは "拠点" アーティストとしてその行を扱います。

+0

オプション2は私に似合います –

+2

私はそれを申し出ましたが、ここでは2つのレベル、基本アーティストとエイリアスのみがあるオプション#2を選択します。オプション#2は任意の深さの階層に適している。従業員の上司の上司の上司。オプション1は、ここではKISSの原則を満たしています。 – Tim

0

ドリュー、tblArtistはアルバムの主な演奏者よりもバンドのようです。私はあなたの質問に記載されてVBのを参照してくださいので、私はまた、このアプリケーションでVBのフロントエンドがあると仮定します。これらの前提のすべてで、altArtistIdという名前のtblArtistにvarcharカラムを追加することをお勧めします。この列をフロントエンドの再録レコードセットに追加します。カンマ区切りリストを解析し、tblArtistに戻って関連する情報を取得します。