web-dev-qa-db-ja.com

スーパーキー、候補キー、およびプライマリキー

どんな種類の魂でも、以下の簡単な例で私の疑問を明確にし、スーパーキー、候補キー、および主キーを特定できますか?

私はそれらの間の違いを説明する多くの投稿やウェブサイトがあることを知っています。しかし、すべてが一般的な定義のようです。

例:

Student (StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber)

したがって、上記の例から、StudentNumberが主キーであることがわかります。

しかし、スーパーキーについては、どの属性の組み合わせをスーパーキーにグループ化できるか少し混乱していますか?

候補キーについては、どの候補キーも主キーとして適格である可能性があるため、定義に戸惑っています。

PhoneNumberなどの属性は候補キーであり、主キーになり得るということですか? (PhoneNumberは1人の生徒のみに属すると仮定)

明確化をありがとう!

33
JLearner

大まかに言って、教科書の定義は必要ないので、スーパーキーは行を一意に定義する列のセットです。

このセットには1つ以上の要素を含めることができ、テーブルには複数のスーパーキーが存在する場合があります。通常、これは機能的な依存関係を介して行います。

あなたの例では、私は仮定しています:

StudentNumber    unique
FamilyName     not unique
Degree     not unique
Major      not unique
Grade      not unique
PhoneNumber    not unique

この場合、スーパーキーは、学生番号を含む任意の組み合わせです。

以下はスーパーキーです

StudentNumber
StudentNumber, FamilyName
StudentNumber, FamilyName, Degree
StudentNumber, FamilyName, Degree, Major
StudentNumber, FamilyName, Degree, Major, Grade
StudentNumber, FamilyName, Degree, Major, Grade, PhoneNumber
StudentNumber, Degree
StudentNumber, Degree, Major
StudentNumber, Degree, Major, Grade
StudentNumber, Degree, Major, Grade, PhoneNumber
StudentNumber, Major
StudentNumber, Major, Grade
StudentNumber, Major, Grade, PhoneNumber
StudentNumber, Grade
StudentNumber, Grade, PhoneNumber
StudentNumber, PhoneNumber

ここで、PhoneNumberが一意である場合(最近電話を共有している場合)、次のものも(上記にリストしたものに加えて)スーパーキーであると仮定します。

PhoneNumber
PhoneNumber, Grade, 
PhoneNumber, Major, Grade
PhoneNumber, Degree, Major, Grade
PhoneNumber, FamilyName, Degree, Major, Grade
PhoneNumber, Major
PhoneNumber, Degree, Major
PhoneNumber, FamilyName, Degree, Major
PhoneNumber, StudentNumber, FamilyName, Degree, Major
PhoneNumber, Degree
PhoneNumber, FamilyName, Degree
PhoneNumber, StudentNumber, FamilyName, Degree
PhoneNumber, FamilyName
PhoneNumber, StudentNumber, FamilyName

候補キーは、単に「最短の」スーパーキーです。スーパーキーの最初のリストに戻ると(つまり、電話番号は一意ではありません)、最短のスーパーキーはStudentNumberです。

主キーは通常、候補キーにすぎません。

52
Cambium

スーパーキーは、値がテーブル内のすべての可能なタプルセットに対して常に一意であることが保証されている属性のセットです。

候補キーは「最小」スーパーキーです-一意のスーパーキー属性の最小サブセットを意味します。したがって、候補キーから属性を削除すると、一意ではなくなります。

主キーは単なる候補キーです。主キーと他の候補キーの間に違いはありません。

属性名のリストのみに基づいてキーについて推測することは、実際には役に立ちません。属性間でどの依存関係が保持されるはずかを知る必要があります。そうは言っても、私はあなたが正しいと思います-StudentNumberはおそらくあなたの例の候補キーです。

13
nvogel

PhoneNumberStudentNumberとともに一意でもある場合、Cambiumの答えを引き伸ばすと、candidate keysは次のようになります。-{StudentNumber}{PhoneNumber}.
ここでは、{StudentNumber,PhoneNumber}を単一のcandidate keyと想定することはできません。なぜなら、1つの属性を省略するとStudentNumberと言うので、一意のattribute{PhoneNumber}が得られるためです。 candidate keyの定義。

Primary key:すべてのcandidate keyからcandidate keysを1つ選択します。 candidate keysが2つあるので、{StudentNumber}としてprimary keyを選択できます。
Alternate keys:残りcandidate keysは、primary keyからcandidate keysを選択した後、代替キー、つまり{PhoneNumber}です。

compound key:複合キーは、エンティティオカレンスを一意に識別する2つ以上の属性で構成されるキーです。単純なキーとは、属性を1つだけ持つキーです。複合キーは、他の一意の単純キーと非キー属性で構成できますが、別の複合キーを含めることはできません。

composite key:複合キーには、少なくとも1つの複合キーともう1つの属性が含まれます。複合キーには、単純キーと非キー属性も含まれる場合があります。

1
JerryGoyal