うんちくメモ

ただのメモです。内容は妄想の可能性があります

PrimaryKey、一意制約、UNIQUE INDEXめも

  • PK作成時にUSING句を使用して作成されるINDEX
    • 作成されるINDEXはUNIQUE INDEXとなる
  • PKの無効化
    • データの一意性を一時的に排除したいなどの理由により、下記の様にPKのみを無効化した場合、自動作成されたUNIQUE INDEXはそのままユニーク属性が残る為、継続して該当列データの一意性が必要となる。

  alter table tab_hoge disable primary key keep index;

   ※PKの場合との一意制約の違いは下記の通り

ORACLEではNULLの重複が許可されているようなので、NOT NULL指定のない一意制約、UNIQUE INDEXでは例えば全ての対象列がNULLのデータを複数行作成出来てしまうため注意。

    1. Primary Key (主キー制約)
      • NOT NULL が漏れなく付く
      • テーブルには1つしか指定できない
      • 制約名を指定しなくても ALTER TABLE で PRIMARY KEY キーワードでENABLE, DISABLE etc. の操作が可能
      • 制約なので遅延制約チェックが実行可能
      • create や alter enable 時に制約名と同じ名前でUNIQUE INDEX が作成される
      • ※本来は、単に一意であると言うのではなくて永続的な属性に対して定義するべき
      • ※たまたま、ユニーク(一意)な項目で永続性が無い属性に設定すると値の変更があったりして、いろいろと難儀することになる
    2. Unique Key (一意制約)
      • NOT NULL は必須ではない
      • テーブルに複数定義することが可能
      • Oracleでは NULL を複数許可する
      • 制約なので遅延制約チェックが実行可能
      • 制約名と同じ名前で Unique Index が作成される
    3. Unique Index のみ
      • NOT NULL は必須ではない
      • テーブルに複数定義することが可能
      • Oracleでは NULL を複数許可する
      • create も drop もインデクッス名が必須
      • 制約では無いのため遅延制約チェックが使用できない