SQLでは、複合キーまたは複合キーですか?


31

SQL(コンピューティング/データベース)について:

テーブルに2つ以上のフィールドがあり、それらが一緒になってレコードを一意に識別する場合、それらを呼び出す適切な方法は何ですか?複合キーまたは複合キー?

私は両方の使用をウェブで見たので、私は本当に確信がありません。


1
次の2つのGoogle検索トレンドを確認してください:goo.gl/5u4XdR
igordcard

回答:


32

複合キーと複合キーの両方は、複数の属性を持つ候補キーを記述します。Relational Database Dictionary(CJDate)によると、それらは同じことを意味します。

ERモデリングでは、「複合キー」という用語には、より具体的な意味もあります。これは、構成属性が他のエンティティのキ​​ーへの参照であるキーを意味します。つまり、複合キーは識別関係を形成します。ほとんどの目的では、これは特に有用または重要な概念ではないため、複合/複合という用語はしばしば交換可能として扱われます。複合キーのERモデリングコンセプトに特に言及している場合を除き、「複合キー」に固執することをお勧めします。


3
「ERモデリングでは、「複合キー」という用語には、より具体的な意味もあります」-説得力があるように聞こえますが、引用はありますか?
いつか

複合キーは、たとえば多対多のリレーションシップに使用されるジャンクションテーブルで通常見られるキーでしょうか?
ジョシュP

19

http://en.wikipedia.org/wiki/Compound_keyが相談されなかった理由はまだわかりません。それは非常に明確に述べています(そして正しいです):

データベース設計では、複合キーは、エンティティオカレンスを一意に識別する2つ以上の属性で構成されるキーです。複合キーを構成する各属性は、それ自体が単純なキーです。

これは多くの場合、複合キーと混同されます。複合キーは、エンティティの発生を一意に識別する2つ以上の属性で構成されるキーでもありますが、複合キーを構成する少なくとも1つの属性はそれ自体が単純なキーではありません。

複合キーは、外部キーである場合とそうでない場合がある要素で構成されます。例:トランザクションの詳細のテーブルでは、キーは(TransactionId、ItemNumber)です。トランザクションの詳細は、トランザクションのサブエンティティです。TransactionIdは、Transactionsテーブルを参照する外部キーです。ItemNumberは、それ自体ではキーではありません。単一のトランザクションのコンテキスト内でのみアイテムを一意に識別します。

複合キーは、キーの一部が外部キーであるキーです。例:ホテル予約システムでは、予約に複合キー(GuestId、HotelId、ArrivalDate)があります。GuestIdはゲストを識別し、Guestsテーブルを参照します。HotelIdはホテルを識別し、Hotelsテーブルを参照します。ArrivalDateは日付を識別します。参照するDatesテーブルがある場合とない場合がありますが、いずれにしてもエンティティ(Date)を識別します。

また、この事実に注目してください。単純なキーは1つの列で構成されるキーですが、複合キーは2つ以上の列で構成されます。


4
jcolebrand:「複合キーとは、キーのどの部分でもレコードを識別できるキーです。」それは間違っています。定義上、キーは既約でなければなりません(最小限のスーパーキー)。タプルを一意に識別するために一部の属性のみが必要な場合、定義ではキーではなくスーパーキーになります。
nvogel

a)ウィキペディアのページを引用していました。b)私はそれに同意する傾向があります。複合キーのどの部分もそれ自体が単純なキーです。スーパーキーと呼んでもかまいません。ただし、すべての複合キーがスーパーキーになる可能性はありません。エルゴ、私はウィキペディアの記事にあるものを支持し、引用した定義を支持します。それがあなたを幸せにするならば、私は私の出版されたハードカバーデータベースデザインブックを取りに行くことができます。
jcolebrand

2
ただし、関連するポイントを見逃したと思います。つまり、複合キーは他のエンティティからのキーで構成されているということです。キーの適切なサブセットをキーにすることはできません。ご存知のとおり、キーは最小限である必要があります(テーブル内でキーになります)。したがって、キーから属性を削除すると、キーではなくなります。
nvogel

2
「キー」は「候補キー」の略です。候補キーの教科書の定義は、常に「最小限のスーパーキー」でした。参照:キーの定義について疑問がある場合は、日付の辞書pg17またはThe Alice Book。
-nvogel

1
Wikipediaページの「複合キー」と「コンプサイトキー」の定義は2014年7月13日に変更され、この回答の定義と一致しなくなりました。(定義を変更せず、定義が現在一致していないことを指摘しただけです。)
spencer7593

3

英語では「複合キー」です。たとえば、MSDN Webサイトを見てください(「SQLコンポジットキー」を含む検索はすべて実行されます)。

http://www.google.com/search?q=sql+composite+key+site:msdn.microsoft.com

質問がリレーショナルデータベースに関するものと仮定して、Wikipediaで「中立」定義を検索しました。

複合キーは、レコードを(一緒に)一意に識別するテーブル内の2つ以上の属性で構成されるキーです。


1
ソースもリファレンスもリンクもなし、何もありません…悪い答えです。


google.com/search?q=sql+composite+key+definitionを使用すると、SQL複合キーについて話している膨大な数のサイトに移動できます
Hemme

1
複合キーのGoogle検索
jcolebrand

3
これは科学的です:googlefight.com/…–
ヘム

3

複合キーは、エンティティの出現を一意に識別する複数の属性で構成されます。これは、キーを構成する1つ以上の属性がそれ自体単純なキーではないという点で、複合キーとは異なります。

たとえば、CDコレクションを保持するデータベースがあります。エンティティの1つはトラックと呼ばれ、CD上のトラックの詳細を保持します。これには、CD名、トラック番号の複合キーがあります。


2

複合キーは複合キーを含むスーパーセットであるように思えます。複合キーが(任意の種類の)複数の属性で作成され、複合キーが複数の単純キーで作成されることを受け入れる場合。複合キーは、より具体的な意味を持つ複合キーの一種ですが、「複合」キーという用語は常に使用に適しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.