web-dev-qa-db-ja.com

主キー制約、一意キー制約、外部キー制約、およびインデックスの違いは何ですか?

primaryuniqueforeign key constraints、およびindexesの違いは何ですか?

Oracle 10gSQL Server 2008を扱っています

22
Gold

主キーと一意キーはエンティティ整合性制約です

主キーを使用すると、テーブル内の各行を一意に識別でき、重複する行が存在せず、null値が入力されないことが保証されます。

一意キー制約は、テーブルの行内のキー値の重複を防ぎ、NULL値を許可するために使用されます。 (Oracleでは、1つのnullは別のnullと等しくありません)。

  • KEYまたはINDEXは、通常の一意でないインデックスを指します。インデックスには異なる値を使用できます。そのため、インデックスのすべての列に同じ値の行が含まれる場合があります。これらのインデックスはデータの構造を強制しないため、クエリを高速化するためにのみ使用されます。
  • UNIQUEは、イン​​デックスのすべての行が一意でなければならないインデックスを指します。つまり、同じ行が、このインデックスのすべての列に対して別の行と同じ非NULL値を持つことはできません。データベースシステムではデータの挿入または更新時にこの個別の値の規則を破ることができないため、クエリの高速化に加えて、UNIQUEインデックスを使用してデータの構造を強化できます。データベースシステムでは、NULL値を許可する列にUNIQUEインデックスを許可する場合があります。その場合、2つの行にNULL値が含まれている場合は同じにすることができます(NULLはそれ自体と等しくないと見なされます)。応用。
  • PRIMARYはUNIQUEインデックスとまったく同じように機能しますが、常に「PRIMARY」という名前が付けられ、テーブルには1つしか存在しない場合があります(常に1つ存在する必要があります。ただし、一部のデータベースシステムはこれを強制しません)。 PRIMARYインデックスは、テーブル内の行を一意に識別する方法として意図されているため、NULL値を許可する列では使用しないでください。 PRIMARYインデックスは、行を一意に識別するのに十分な最小数の列に常に配置する必要があります。多くの場合、これは一意の自動インクリメントされた番号を含む1つの列にすぎませんが、国のリストの「countrycode」など、行を一意に識別できるものがある場合は、代わりにそれを使用できます。
  • FULLTEXTインデックスは上記のすべてとは異なり、その動作はデータベースシステム間でさらに異なります。通常、bツリー(左端の列から選択、並べ替え、または範囲を許可)またはハッシュ(左端の列から選択を許可)である上記3つとは異なり、FULLTEXTインデックスは、 MATCH()/ AGAINST()句。

MySQLのINDEX、PRIMARY、UNIQUE、FULLTEXTの違い?

25
Nadir SOUALEM

プライマリキー: nullにはできないすべての行を一意に識別します。重複することはできません。

外部キー: 2つのテーブル間の関係を作成します。 nullでもかまいません。重複する可能性があります

25
sana

以下に参考資料を示します。

プライマリキーと外部キーの制約。

プライマリキー:プライマリキーは、テーブル内のレコードを一意に識別するフィールドまたはフィールドの組み合わせであり、個々のレコードを混乱なく見つけることができます。

外部キー:外部キー(参照キーとも呼ばれます)は、2つのテーブルをリンクするために使用されるキーです。通常、1つのテーブルから主キーフィールドを取得し、それを他のテーブルに挿入して、外部キーになります(元のテーブルでは主キーのままです)。

一方、 Index は、一部の列に適用できる属性であるため、これらの列で実行されるデータ取得を高速化できます。

7
Graviton

キー/インデックス:キーは論理データベース設計の側面であり、インデックスは物理データベース設計の側面です。キーは整合性制約に対応します。インデックスは値を物理的に記録する技術であり、これらの制約を実施するときに便利に適用できます。

プライマリ/外部:「プライマリ」キーは、値がテーブル全体で一意の組み合わせを形成する必要がある属性のセットです。このようなセットは複数存在する可能性があります(> 1キー)。「プライマリ」という言葉は、設計者が複数のキーの1つを「最も重要/関連する」キーとして選択することを余儀なくされた当時の名残です。 。この理由は、主に外部キーとの組み合わせでした。

「プライマリ」キーと同様に、「外部」キーも属性のセットです。これらの属性の値は、参照されるテーブルの既存の主キー値である組み合わせを形成する必要があります。今日、この規則がSQLにどの程度厳密に適用されるのか、正確にはわかりません。とにかく用語は残っています。

一意:インデックスが重複エントリを受け入れることができないことを示すために使用されるキーワード。一意のインデックスは、明らかに主キーを適用する優れた手段です。ロジカルデザインの文脈で「ユニーク」という言葉が使用されている限り、それは余分で、ずさんで、不必要でわかりにくいものです。キー(つまり、主キー)は、定義により一意です。

4
Erwin Smout
  1. 主キーは、テーブル内の行を一意に識別する列または列のセットです。主キーは短く、安定していてシンプルでなければなりません。外部キーは、2番目のテーブルの列(または列のセット)であり、その値は元のテーブルの主キーの値と一致する必要があります。通常、外部キーは、主キーが一致する必要があるテーブルとは異なるテーブルにあります。テーブルは複数の外部キーを持つことができます。
  2. 主キーはヌル値を受け入れることができません。外部キーは複数を受け入れることができます。
  3. テーブルには主キーを1つだけ含めることができます。テーブルには複数の外部キーを含めることができます。
  4. 既定では、プライマリキーはクラスター化インデックスであり、データベーステーブルのデータはクラスター化インデックスの順序で物理的に編成されます。外部キーは、クラスター化または非クラスター化のインデックスを自動的に作成しません。外部キーに手動でインデックスを作成できます。
3
Khadija

1)A primary keyは、リレーション内でタプルを一意に識別する1つ以上の属性のセットです。

2)A foreign keyは、別の関係スキームのタプルを一意に識別することができる関係スキームの属性のセットです。

3
aishwarya g

主キーは主に重複を防ぎ、列の一意性を示します外部キーは主に2つのテーブルの関係を示します

1
Alex alais