2017-04-12 20 views
1

間違っている場合は修正してください。そして、このコンセプトに関する記事を親切に指摘してください。SQLの主キー、インデックス、および制約

プライマリキーを作成すると、バックグラウンドで自動的にユニークなインデックス、クラスタ化インデックス、およびその列に作成されたNOT NULL制約が作成されます。

これは、非NULL制約[クラスタ化インデックスまたは非クラスタ化インデックス]と列の一意索引を作成すると、その列が主キーになりますか?

主キー、インデックス、および制約のコア概念/関係を理解し​​たいと思います。

+0

Microsoft SQL SERVER – variable

答えて

1

主キーが「主」キーとして宣言されているものです。特性を持っているだけでキーが「プライマリ」にならない。そのように明示的に宣言されなければならない。

異なるデータベースは、主キーをさまざまな方法で実装します。主キーは通常、クラスタ化された一意のインデックスで実装されますが、これは必須ではありません。

プライマリキーは、その名前が示すとおり、「プライマリ」です。他の列または列のグループは、uniquenot nullの両方で宣言できます。それはそれらを主キーにしません。一部のデータベースでは、別の列または列のグループを、not null,uniqueおよびというクラスタ化して定義することもできます(プライマリキーなし)。あなたがテーブルの上にユニークなインデックスの数に制限はありません

  • :要するに

  • テーブルのNULLでない列には、任意の数の一意のインデックスを設定できます。
  • クラスタ化インデックスは最大1つまで持つことができます。ほとんどの場合、これが主キーになります。しかし、すべてのデータベースで必須ではありません。
  • 最大で1つの主キーを持つことができます。ほとんどの場合、これはクラスタ化されますが、これはすべてのデータベースで必須ではありません。

詳細については、使用しているデータベースのドキュメントを参照する必要があります。

複数の列にNULL以外の一意のキーが含まれている場合は、1つだけが「プライマリ」です(プライマリとして明示的に宣言されているもの)。

なぜ非クラスタ化プライマリキーを使用しますか?私は1つのシナリオを与えることができます。 UUIDが行のキーであるデータベースを想像してみてください。自動生成されたシーケンス番号は、番号の情報を提供するため、使用したくない。

ただし、UUIDはのクラスタ化されたインデックスでは非常に悪い候補です。挿入がほとんど最後にないためです。この場合、挿入を高速化するために、クラスタ化自動生成シーケンシャルキーを使用してテーブルを設計することができます。このキーをプライマリキーにすることができます。しかし、すべての外部キー参照でUUIDを使用し、すべての外部キー参照をテーブルの主キーにしたいとします。

+0

私の質問は1列のみを参照しています。私は明らかだと思った。私の質問は今、意味がありますか? – variable

+0

@variable、GordonはPKが明示的に宣言されるべきであることを指定しました – LONG

+0

ありがとうございます。だから、なぜそれが真実でないのはなぜですか? – variable

0

すべての列がPK可能性がありNot nullNon-clustered indexUniqueしかし、唯一のONE列を追加することができます。

そしてUniqueNULLを許容し、Primary Keyは許容しません。

あなたがここに約Candidate Keyの話かもしれないがrefは次のとおりです。 https://www.techopedia.com/definition/21/candidate-key

+0

インデックスまたは制約がユニークであればアドバイスできますか? – variable

+0

どういう意味ですか?私は理解していません – LONG

+0

背景 - インデックスまたは制約として実装されたユニークなキーですか? – variable

関連する問題