主キーかユニークインデックスか?質問する

主キーかユニークインデックスか?質問する

職場では、主キーの代わりに一意のインデックスを持つ大きなデータベースがあり、すべて正常に動作しています。

新しいプロジェクトのために新しいデータベースを設計しているのですが、ジレンマに陥っています。

DB 理論では、主キーは基本的な要素であり、それは問題ありませんが、実際のプロジェクトでは、両方の利点と欠点は何でしょうか?

プロジェクトでは何を使用しますか?

編集:...そして、MS SQL サーバー上の主キーとレプリケーションはどうでしょうか?

ベストアンサー1

ユニークインデックスとは何ですか?

列の一意のインデックスは、その列のインデックスであり、2 つの異なる行のその列に同じ値が 2 つ存在できないという制約も適用されます。例:

テーブル table1 (foo int, bar int) を作成します。
CREATE UNIQUE INDEX ux_table1_foo ON table1(foo); -- foo に一意のインデックスを作成します。

テーブル1 (foo, bar) に値 (1, 2) を挿入します。 -- OK
テーブル1 (foo, bar) に挿入 VALUES (2, 2); -- OK
テーブル1 (foo, bar) に挿入 VALUES (3, 1); -- OK
INSERT INTO table1 (foo, bar) VALUES (1, 4); -- 失敗します!

キー 'ux_table1_foo' の重複エントリ '1'

foo最後の挿入は、この列に値 1 を 2 回目に挿入しようとしたときに、列の一意のインデックスに違反するため失敗します。

MySQL では、一意の制約により複数の NULL が許可されます。

複数の列に一意のインデックスを作成できます。

主キーとユニークインデックス

同じ点:

  • 主キーは一意のインデックスを意味します。

異なる点:

  • 主キーも NOT NULL を意味しますが、一意のインデックスは NULL 値を許可できます。
  • 主キーは 1 つだけですが、一意のインデックスは複数存在できます。
  • クラスター化インデックスが定義されていない場合は、主キーはクラスター化インデックスになります。

おすすめ記事