2009-03-29 11 views

答えて

4

はい、完全に問題ありません。何故なの?複合主キーの欠点は、それが長くなる可能性があり、アプリケーションの観点から一行を一意に識別することが難しいことです。しかし、2つの整数列(特にジャンクション・テーブル)では、それは良い方法です。

0

"ok"の定義には、はい。この交差テーブルにフィールドを追加するつもりがない限り、それは問題ありません。ただし、フィールドを増やす予定がある場合は、IDフィールドを持つことをお勧めします。それはまだ良いですが、それを考えに来るが、より扱いにくいかもしれません。

もちろん、ディスク容量には重大なプレミアムがあります。

0

データベースの教科書を見ると、そのような表が大量に見つかるでしょう。これは、n対m関係を定義するデフォルトの方法です。たとえば:あなたはそれを主キーとして定義を控え、代わりにUNIQUE制約を持つ通常の指標として、それを作成することがありますので

article = (id, title, text) 
author = (id, name) 
article_author = (article_id, author_id) 

は意味的に、article_authorは新しいエンティティではありません。

0

はい、私は同意します。「OKの定義」はOKです。しかし、このコンポジット・プライマリ・キーをどこかから参照する(つまり、それを外部キーに移動する)と、すぐにNG(Not Good)と呼ばれます。

+0

どのように「良くない」になるのですか? –

1

ナチュラルと人工のプライマリキーは、広く議論されている問題の1つであり、IMHOではそのポジションが固まっているように見えます。

私の意見では、開発者が両方の欠点を回避する方法を知っている限り、どちらも問題ありません。自然な主キー(複合または単一列のいずれか)は、重複行がDBに追加されないことをより確実に保証します。人工の主キーでは、最初にレコードがユニークであることを確認する必要があります(主キーとは対照的に、人工的なものは常にユニークです)。これを達成する1つの効果的な方法は、レコードを一意にするフィールドに一意または候補インデックスを持たせることです(たとえば、主キーの候補となるフィールド)。

一方、人工の主キーは簡単に結合できます。 1つのフィールドから1つのフィールドへの結合で関係を作ることができます。コンポジット・キーを使用すると、SQL文の作成者は、結合に含めるフィールドの数を把握する必要があります。

+0

人工キーは簡単に結合できるようにすることがありますが、一連の人為的なIDによって一連の関係をトラバースする必要があるため、さらに多くの結合が必要になることがよくあります。 –

+0

"...もっと多くの参加が必要です..." - これは誤りです。同じ数の結合が必要ですが、より多くのフィールド数を必要とします。 – alex

関連する問題