26

候補キーと複合キーについて読んでいます。私はそれを知るようになりました

  • 候補キーは主キーとしての資格を得ることができ、単一の列または列の組み合わせにすることができます
  • 複合キーも列の組み合わせです。

複合キーについては、このリンクを参照しました

SQL Server Management Studioで複合キーを作成するにはどうすればよいですか?

したがって、候補キーと複合キーの両方が列の組み合わせである場合、それらは主キーとしての資格を得ることができます。では、正確な違いは何ですか?例を挙げて説明していただけますか?

4

6 に答える 6

20

私が知っているように、候補キーは主キーとして使用できる一意のキーです。ただし、必ずしも1つとして使用されるとは限りません。

複合キーは、行を一意に識別する2つ以上の属性のキーです。

于 2011-04-10T06:56:01.660 に答える
16

キーは、テーブル内の各行を一意に識別するために使用できる列のセットです。

すべてのテーブルには少なくとも1つのキーがあります。テーブルの可能な各キーを特定したとしましょう。これらの各キーは候補キーです。

これらの各キーを調べると、キーは列なし(!)、1つの列、または複数の列で構成されている可能性があり、これらを一緒に検討すると、各行が一意に識別されます。複合キーという用語は、具体的には複数の列で構成されるキーを指します。

SQLでは、1つのキーを選択し、テーブルの他のキーよりも「同等」に扱う必要があると決定されました。このキーは主キーと呼ばれます。他のキーもテーブルで宣言できます。これらは通常、一意の制約と呼ばれます。

(!)SQLでは、列のないキーを宣言することは許可されていませんが、場合によっては便利です(各列が構成情報を表す、単一の行のみを持つ必要があるテーブルを考えてみてください)。


複数のキーを持つテーブルの例として、すべてが複合です。クライアントとカウンセラーが特定の時間に部屋で会う予約システムを想像してみてください。

CREATE TABLE Appointments (
    ClientID int not null,
    CounsellorID int not null,
    RoomID int not null,
    AppointmentTime datetime not null
)

このテーブルの候補キーは、{ClientID、AppointmentTime}、{CounsellorID、AppointmentTime}、および{RoomID、AppointmentTime}です。これらの列の組み合わせはいずれも、テーブル内の行を一意に識別するために使用でき、それらはすべて複合キーです。

主キーとしてどちらを宣言するかは、(おそらく)システムの主な「焦点」の私たち自身の解釈に依存します。私たちは主に部屋の使用、またはクライアント、またはカウンセラーに関心がありますか?いずれの場合も、1つを選択し、それを主キーとして宣言します。また、他のキーを一意の制約として宣言することもできれば幸いです。

AppointmentIDまたは、データベースで使用可能な自動番号付け機能を使用して、サロゲートを使用し、列を宣言することもできます。その場合、それが(非複合)主キーになる可能性があります。ただし、テーブルの他のキーを宣言する必要があります。

于 2011-04-10T07:03:03.247 に答える
7

候補キー:主キーフィールドの候補は、候補キーと呼ばれます。

複合キー:複数の主キーを作成することは、まとめて複合キーと呼ばれます。

更新: 候補キーは、主キーとして使用できる一意のキーです。複合キーは、行を一意に識別する2つ以上の属性のキーです。キーは、テーブル内の各行を一意に識別するために使用できる列のセットです。

于 2011-04-10T06:57:27.460 に答える
4

CANDIDATE KEY :- 候補キーは一意のキーであり、主キーになるための「候補」です。 COMPOSITE KEY :- 2 つ以上の列を主キーとする「構成」は、複合キーと見なされます。

于 2017-07-27T09:27:39.763 に答える
2

候補キーとは、主キーとして使用できる列または列の組み合わせ、つまり候補キーまたは潜在的な主キーです。複合キーは、定義上、行を識別するために使用できる2つ以上の列です。複合キーについて話すとき、最も一般的な問題は、代わりに代理キーを持つためにそれを主キーとして持つかどうかです。場合によっては、主キーではない(つまり、すべての行で一意ではない)複合キーを参照することがあります。その場合、(願わくば)非主キーのマルチ列結合を参照する方法にすぎません。フィールド(クロス結合を実行してwhere句の行をフィルタリングする代わりに)。

于 2011-04-10T07:07:13.137 に答える