2

スーパーキーには、主キーの一部ではないものを含めることができますか?

4

2 に答える 2

1

スーパーキーには、一意でない識別子または主キーを含めることができます。ただし、複合主キーのように、組み合わせは一意である必要があります。正規化されたデータセットには、データベースの目的に関連する特定のエンティティに関するデータを保持するテーブルがあります。したがって、たとえば、従業員データベースを持つ会社には従業員のテーブルがあり、従業員の行動履歴(昇進、レビュー、給与調整など)の別のテーブルがある場合があります。

キーは、テーブル内のデータがそのキーに完全に依存し、他に何も必要とされないように、テーブル内の特定の行を一意に選択する資格がある場合、候補キーです。

従業員テーブルが米国ベースであると仮定します。2つの候補があります。1つは従業員番号で、もう1つは従業員の社会保障番号です。会社が従業員にSSNを要求する場合、これが発生する可能性があります。

OK、2人の候補者-従業員番号とSSN。

1つを主キーとして選択する必要があります。その場合、もう1つは、キーの選択に応じて別のデータフィールドになります。

米国では、2つの要因に基づいて、従業員番号がPKとして選択され、SSNがセカンダリフィールドとして残される可能性があります。まず、SSNは個人情報の盗難を助長する個人情報であるため、SSNの使用には法的な制限があります。第二に、ある人がSSNを申請したが、まだ取得していない可能性があります。したがって、SSNは信頼できないため、候補として無効になります。

したがって、主キーと候補キーの違いは、他の候補がレースに負けたことです。

SUPERKEYは本質的に過剰に決定されたキーであり、一意のセレクターであることが保証されていますが、これは最小ではありません。私の従業員テーブルの例では、(従業員番号、SSN)の組み合わせがスーパーキーになります。スーパーキーには主キーが含まれることが多いことに注意してください。

それだけではありません。定義は、キーとしてのレコード全体と同じカーディナリティを持つスーパーキーについて説明しています。(究極のキー、キーとして使用するにはレコード全体を事前に知っている必要があるため、完全に実用的ではありません...)

「カーディナリティ」は、単一のキー値でテーブルをクエリすると、返されるレコードの平均数を単純に示します。適切なプライムキーの場合、これは常に、テーブルに存在するすべての値に対して1つだけです。(明らかに、テーブルに存在しない数値の場合はゼロです。)カーディナリティは、一意でないキーの場合は1より大きくなります。スペクトルのもう一方の端の通常の例は、サイズNのテーブルの場合です。キーとして「性別」を使用すると、カーディナリティはN/2になります。これはAVERAGEの戻りサイズであるため、テーブルの分布が完全である必要はないことを忘れないでください。

お役に立てば幸いです。

于 2010-02-01T21:30:59.987 に答える
1

論理的に言えば、そうです。テーブルXに列が{A, B, C}ありA、主キーである場合{A}、、、およびはすべてスーパーキーです。これらのセットのいずれかがある場合は、行のすべての値がわかっているためです(存在する場合)。{A, B}{A, C}{A, B, C}

ただし、SQLでキーとして扱われない場合もあります。たとえば、テーブルYにキーがあり、主キーではないため、通常は外部キーを定義できないA場合などです。その外部キーを宣言できるようにする場合は、主キーの一部を複製するため非効率的な別の制約を追加する必要があります。BY(A, B) REFERENCES X(A, B){A, B}UNIQUEX(A, B)

私の意見では、これはSQLの多くの欠陥の1つです。

于 2010-02-01T21:42:18.810 に答える