主キーが「主」キーとして宣言されているものです。特性を持っているだけでキーが「プライマリ」にならない。そのように明示的に宣言されなければならない。
異なるデータベースは、主キーをさまざまな方法で実装します。主キーは通常、クラスタ化された一意のインデックスで実装されますが、これは必須ではありません。
プライマリキーは、その名前が示すとおり、「プライマリ」です。他の列または列のグループは、unique
とnot null
の両方で宣言できます。それはそれらを主キーにしません。一部のデータベースでは、別の列または列のグループを、not null
,unique
およびというクラスタ化して定義することもできます(プライマリキーなし)。あなたがテーブルの上にユニークなインデックスの数に制限はありません
- :要するに
。
- テーブルのNULLでない列には、任意の数の一意のインデックスを設定できます。
- クラスタ化インデックスは最大1つまで持つことができます。ほとんどの場合、これが主キーになります。しかし、すべてのデータベースで必須ではありません。
- 最大で1つの主キーを持つことができます。ほとんどの場合、これはクラスタ化されますが、これはすべてのデータベースで必須ではありません。
詳細については、使用しているデータベースのドキュメントを参照する必要があります。
複数の列にNULL以外の一意のキーが含まれている場合は、1つだけが「プライマリ」です(プライマリとして明示的に宣言されているもの)。
なぜ非クラスタ化プライマリキーを使用しますか?私は1つのシナリオを与えることができます。 UUIDが行のキーであるデータベースを想像してみてください。自動生成されたシーケンス番号は、番号の情報を提供するため、使用したくない。
ただし、UUIDはのクラスタ化されたインデックスでは非常に悪い候補です。挿入がほとんど最後にないためです。この場合、挿入を高速化するために、クラスタ化自動生成シーケンシャルキーを使用してテーブルを設計することができます。このキーをプライマリキーにすることができます。しかし、すべての外部キー参照でUUIDを使用し、すべての外部キー参照をテーブルの主キーにしたいとします。
Microsoft SQL SERVER – variable