2011-12-15 27 views
0

データベースを作成するときに、あるテーブルに他のテーブルの2つの主キーのみが含まれていると、何が起きるかは、両方が外部キーであると仮定しています。テーブルにプライマリキーが必要ですか?主キーと外部キー?

答えて

0

テーブルに必ずしもプライマリキーが関連付けられている必要はありません。それは私

を次のように完全に有効なTable_Album

pkey | name 
1 | name1 
2 | name2 

Table_Song

pkey | name 
1 | song1 
2 | song2 
3 | song3 

あなたはその後、

Table_Album_Song_Map

01を述べたテーブルを持つことができます
id | Album | Song # Here id is just row number and not primary key 
1 | name1 | song1 
2 | name1 | song2 
3 | name2 | song3 

1

いいえ;テーブルはプライマリキーを持つ必要はありません。

このようなリンク/マッピングテーブルの場合は、しばしば(通常は?)しません。

+0

これは奇妙な大量ダウン・ボークだった。 –

2

ちょうど2つの外部キーと他には何もしてリンクテーブルを助け希望(何のサロゲートキーは、単純な意味のない主キーを作るために追加されません)通常一意であるように制約されます(そうでない場合は、あなたがされません重複を区別することができます - これは通常の形式にも違反しています)ので、主キーを構成する複合キーとしてこれら2つのキーを一緒に使用します(PKは定義上一意でなければならず、そのようなリンクテーブルのPKのための選択)。主キー内のこれらの列の順序は、通常、最も頻繁な検索順序、すなわちpersonidによって決定されます。accountidは、personidのaccountidのコンポジット主キーでpersonidを最初に持つことがあります。

+0

+1はい、あなたは主キーが1つ以上の列の*制約*です。それは他の答えが仮定しているように、列ではありません。 –

+0

私は同意しますが、それはどれも*必須*ではありません。これはどのように私が質問を読むかです。 –

+0

@Dave Newton主キーを持つ必要はありませんが、このようなテーブルのメンテナンスは、ほとんどすべての可能性がありますが、実際には強く想定しています(ただし、必要ありませんが重複は簡単に区別できません。 )一意のキーであり、2つの列しかない場合、それらは両方とも外部キーであり、NULLになる可能性は低いので、私は先に進んで主キーを作成し、すべての鳥を1つの石で殺します。 –

0

関連エンティティまたはテーブルがある場合は、両方の親のキーで構成される複合プライマリキーを作成することをお勧めします。この例では、アルバムと歌のコンポジットのAlbum-Song-Mapに一意性の制約があります。これらをプライマリキーにしないで、組み合わせをユニークにすると、Album-Song-Mapで重複を持つことができます。 Album-Song-Mapの複合キーは両方の親のキーですが、個々に、それぞれ親、アルバム、およびソングに戻る外部キーです。私の経験では、アソシエーティブ・エンティティは通常マッピングのためだけでなく、ビジネス・アトリビュートもいくつか含んでいます。たとえば、ある曲のDuration(再生時間)が別の曲と異なるとします。この属性はAlbum-Song-Mapになければなりません。私はダンスのためにたくさんの音楽を使いますが、しばしば曲のデュレーションはアルバムごとに異なります。

関連する問題