1

音楽 CD を販売する Web サイトのデータベース設計を作成していますが、CD とそのジャンルの関係が 1 対多なのか多なのかがよくわからず、壁にぶつかっています。 -対多

各 CD には複数のジャンルを含めることができます。たとえば、「Ministry of Sound Dubstep Anthems」には、ダブステップ、ダンス、エレクトロなどのジャンルを含めることができます。

考えれば考えるほど、各ジャンルは何枚もの CD にリンクすることもできます。

現時点でデータベースを持っている方法は次のとおりです。

cd_table
   PK ID
   FK Genre
   Description
   ...

genre_table
   PK ID
   Genre

多対多の場合、次のような結合テーブルが必要になると考えています。

cd_genre
   CD_ID
   Genre_ID

そして、両方を主キーとして機能させますか? cd_genre を cd_table にリンクするにはどうすればよいですか? それとも、cd_table の FK を削除してから、CD のクエリを実行するときに結合を実行しますか?

4

3 に答える 3

0

多重度を決定するには、異なる関係から始めて同じ質問をします。

  1. CD は複数のジャンルに属することができますか?
  2. ジャンルに複数の CD を含めることはできますか?

もちろん、これは間違ったデータベース モデルである可能性があります。代わりに、Song<->Genre および Song<->CD は、上位の正規化された形式です。CD<->Genre は CD<->Song<->Genre から構成できますが、CD<->Genre は CD 上の Songs に関する同じクエリに答えることができないため、より高い NF です (CD が多くても 1 つの Genre である場合を除きます)。 )。

一方で、曲ではなく CDだけを気にする人もいるかもしれません。この場合、曲をモデル化することは、関係のない、または有害な過剰なデータですらあります。同様に、完全な分類は実際の分類を過度に複雑にする可能性があります。情報の粒度と問題領域への使用との間のトレードオフに注意してください。

于 2013-03-25T21:50:46.297 に答える
0

おっしゃる通りです。CD とジャンルの関係はまさにあなたが提供した理由から、多対多です。

はい、あなたが説明したような相互参照/結合テーブルが必要です。


興味深いことに、他の制約によっては、ジャンルを他の場所にも入れたい場合があります。たとえば、曲: Weird Alのようなアーティストは、彼のアルバムの 1 つにいくつかの異なるジャンルの曲を入れることがあり、アルバム自体は必ずしも単一の「メイン」ジャンルを持っているわけではありません (ただし、多くの場合、いくつかの「テーマ」があります)。

于 2013-03-25T21:38:14.447 に答える
0

あなたはあなた自身の質問に答えたと思います。CD とジャンルは多対多であり、通常「結合テーブル」と呼ばれる 2 つの外部キーを持つ 2 列のテーブルで実現します。通常、そのテーブルに主キーがあると考える必要はありませんが、合理的には、2 つの列を合わせて複合主キーと見なします。

于 2013-03-25T21:38:23.887 に答える