- キーとは何ですか?
- シンプルなキー
- 連結キーまたは複合キー
- 主キー
- 数値化と自動インクリメント
- テーブルに複数の主キーを含めることはできますか?
多くの開発者やデータベース管理者は主キー
を使用する場合があります 毎日、「正確には 」と自問するのは魅力的なトピックです。 主キー
また、データベーステーブルに複数の主キー
を含めることができます(または含める必要があります)。 同時に?」
以下では、これらの質問をより詳細に検討し、開発コミュニティ内で合理的で一般的に合意されたコンセンサスに到達しようとします。
主キー
が何であるかを理解する がデータベーステーブルにある場合、最初に非主キー
について少し理解する必要があります 。 キーコード> テーブル内は、その情報を識別してアクセスするために使用される単なる属性です。テーブルには、テーブル
Users
のように、複数のキーが含まれる場合があります。 両方のメール
およびusername
キーと見なすことができます。
話している開発者または管理者によっては、さまざまなキータイプとその定義について耳にすることがあるため、以下にいくつかの異なる例とそれぞれの基本的な定義について説明します。
シンプルキー
テーブル内の単一の属性のみを使用するキーです。キーまたはテーブルにさらに制限を課さない限り、 username
上記の例の属性は単純なキー
です 。
シンプルキー
からさらに一歩進んだ 連結
またはcompound
キー。名前が示すように、連結キー
複数の単一のキー
の結合です 。たとえば、システムは自動的に last_name
を結合する場合があります およびyear_of_birth
シングルキー
連結キー
に 、そのように: smith1980
。
[主キー](https://en.wikipedia.org/wiki/Unique_key)
は、プリンシパル(またはプライマリ)として選択されたキーです。 )そのデータ行の代表的な属性。 主キー
ユニーク そして、その属性はデータベース全体で使用され、問題のデータの代表的な属性としてアクセスされ、他のテーブルに渡されます。
実際には、主キー
属性もNOTNULL
としてマークされます ほとんどのデータベースでは、これは、テーブルに挿入されるレコードの値が属性に常に含まれている必要があることを意味します。
例として、 email
またはusername
シンプルキー
できた 主キー
の指定が割り当てられます 、ただし通常は、主キー
を設定することをお勧めします ビジネスロジックまたは個人によっても変更されない(または変更できなかった)属性に変更します。たとえば、 User
を想像してみてください 新しいメールアドレスを取得すると、過去のすべての主キー
が発生します 古いメールアドレスを使用して作成された関連付けは、新しいメールアドレスを使用すると無効になります。
このため(とりわけ)、ほとんどの主キー
[UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
などの数値または一意の文字列を使用します 。
また、多くのデータベースシステムは、すべてのテーブルに主キー
が含まれるように設定されていることにも注意してください。 これは数値であり、自動インクリメントされます。これは単に、データベースエンジン自体が、そのテーブル内の新しい各レコードに一意の主キー
を自動的に割り当てることを意味します。 以前のすべての値よりも段階的に大きい値。ただし、ほとんどの開発者は、この方法が時代遅れであり、一部に使用すると、システムに不要なセキュリティ上の欠陥が生じることに同意しています。 特定のデータを表すテーブル。
たとえば、すべての User
を想像してみてください レコードには、自動インクリメントされた主キー
が割り当てられます 値、 id
として知られています 属性。悪意のある人がid
を発見した場合 特定のユーザー(例:John Smith)の属性は、値 1500
です。 、これはすでに少しの情報を公開しています。まず、システムには少なくとも1499人の他のユーザーがいる可能性が高いか、ある時点で存在していたことを示しています。また、John Smithのユーザーページに、その id
を含むURLまたはAPI呼び出しを介してアクセスできる場合も意味します。 1500
の値 、その後、値を 1499
などの別の数値に変更するだけの可能性があります。 または1501
、この訪問者が自分のページにアクセスすることを望まない可能性のある別のユーザーのページを公開します。このように、レコードは単に推測することでクエリできます。 id
質量スケールの値。
これらは明らかに非常に単純な例ですが、これらの理由から、ほとんどの最新のデータベースはランダム化された一意の主キー
を使用します。 UUID
などの属性値 機密データを扱う場合。
テーブルに複数の主キーを含めることはできますか?
簡単な答えはいいえです 、テーブルに複数の主キー
を含めることはできません 、リレーショナルデータベース設計の基本原則に反するため( [データベースの正規化](https://en.wikipedia.org/wiki/Database_normalisation)
を参照) および[第3正規形](https://en.wikipedia.org/wiki/Third_normal_form)
。
テーブルに複数の候補キー
を含めることができます 、主キー
と同様に効果的に動作します その中で候補キー
一意、 NOT NULL
、およびはそのテーブルレコードの特異な表現です。
ただし、どの1つを選択するかについては 属性は主キー
として割り当てられます テーブルの場合、選択はすべての潜在的な候補キー
のリストから行われます。 (そのため、名前は主キー
になるための候補です。 )。最終的に、候補キー
は1つだけです。 このテーブルで主キー
として使用される、そのレコードの最も代表的な属性として選択されます それぞれの外部キー
を介して他のテーブルによってデータベースの他の場所で参照されます 。