1. 複合主キー
#いわゆる複合主キーとは、テーブルの主キーに複数のフィールドが含まれていることを意味します。 . 使用されない場合はビジネス上の意味がなく、自動インクリメントされる ID が主キーとして使用されます。
例:
create table test ( name varchar(19), id number, value varchar(10), primary key (name,id) )
上記の名前フィールドと ID フィールドの組み合わせは、テスト テーブルの複合主キーです。これは、名前フィールドが同じ名前を持つ可能性があるため表示されます。 ID フィールドを使用すると、レコードの一意性を確保できます。一般に、主キーのフィールド長とフィールド数はできるだけ小さくする必要があります。
ここで疑問が生じるでしょう? 主キーが唯一のインデックスであるのに、なぜテーブルは複数の主キーを作成できるのでしょうか?
実のところ、「主キーが唯一のインデックスである」というのは少し曖昧です。たとえば、テーブルに ID フィールドを作成し、自動的に拡張して主キーとして設定しますが、「主キーが唯一のインデックス」であり、ID フィールドは一意性を確保するために自動的に拡張されるため、問題ありません。大丈夫です。
この時点で、varchar 型で別のフィールド名を作成し、それを主キーとして設定します。テーブルの複数の行に同じ名前の値を入力できることがわかります。これは違法ではありませんか? ? この文は「主キーが唯一のインデックスです」ということでしょうか?
これが、「主キーが唯一のインデックスである」が曖昧だと述べた理由です。 「テーブル内に主キーが 1 つだけある場合、それが唯一のインデックスです。テーブル内に複数の主キーがある場合、それは複合主キーと呼ばれます。複合主キーの組み合わせは、一意のインデックス"。
自己増加 ID はすでに一意の識別のための主キーとして使用できるのに、複合主キーが依然として必要なのはなぜですか?すべてのテーブルに ID フィールドが必要なわけではないためです。たとえば、学生テーブルを作成し、学生を一意に識別する ID がない場合、どうすればよいでしょうか? 学生の名前、年齢、クラスはすべて繰り返される可能性があります。単一のフィールドを一意の識別に使用することはできません。このとき、複数のフィールドを主キーとして設定して、複合主キーを形成できます。これらの複数のフィールドを合わせて一意性を識別します。その中で、特定の主キー フィールド値があれば問題ありません複数のレコードがない限り繰り返されます。すべての主キーの値がまったく同じである場合、それらは重複とは見なされません。
2. ジョイント主キー
ジョイント主キーは、名前が示すように、複数の主キーを組み合わせて形成するものです。主キーの組み合わせ (主キーは原則として一意です。一意の値によって問題が発生する必要はありません。)
結合主キーの意味: 2 つのフィールド (または複数のフィールド、具体的には 2 つのフィールドの組み合わせ) を使用します。フィールドは後で使用されます) を使用してレコードを決定し、これら 2 つのフィールドが一意ではないことを示します。2 つのフィールドは別々に繰り返すことができます。この設定の利点は、繰り返しフィールドのレコード数を直感的に確認できることです。
簡単な例:
主キー A と主キー B は結合主キーを形成します。
主キー A と主キー B のデータはまったく同じであってもかまいません。共用体は主キー A と主キー B にあります。結果として得られる結合主キーは一意です。
次の例では、主キー A のデータは 1、主キー B のデータも 1、結合された主キーは実際には 11 です。この 11 は一意の値であり、11 の一意の値は次のようになります。二度と現れることは絶対に許されない。 (多対多の関係です)
主キーAのデータ 主キーBのデータ
1 1 ##2 2
3 3
12
13
21
22
23
31
32
33
以上がユニオン主キーと複合主キーの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。