Oracle Databaseでデータを管理する際、同じ値が複数登録されることを防ぎたい場合には、プライマリキー(PRIMARY KEY)が利用されます。プライマリキーを設定した列では、一意性が保証されるため、同じ値を持つデータを登録できなくなります。
しかし、プライマリキーには重複防止以外にも、NULLを許可しない仕組みやインデックス作成など、データベース設計で重要な役割があります。この記事では、Oracle Databaseにおけるプライマリキーの動作や設定方法、注意点について詳しく解説します。
Oracle Databaseのプライマリキーとは
プライマリキー(PRIMARY KEY)とは、テーブル内の各行を一意に識別するための列または複数列の組み合わせです。
例えば、社員情報を管理するテーブルでは、社員番号のように必ず1人につき1つだけ存在する値をプライマリキーとして設定します。
例。
CREATE TABLE employees (employee_id NUMBER PRIMARY KEY, employee_name VARCHAR2(50));
この場合、employee_id列には同じ値を2回登録することはできません。また、値が未設定(NULL)のデータも登録できません。
プライマリキーを設定すると重複値は登録できない
Oracle Databaseでは、プライマリキーを設定した列に対して一意性制約が自動的に適用されます。
例えば、以下のようなデータがすでに存在するとします。
employee_id | employee_name
1 | 田中
2 | 佐藤
この状態で、employee_idが1のデータを追加しようとすると、Oracleは重複エラーを発生させ、登録を拒否します。
この仕組みによって、社員番号や商品コードなど、本来重複してはいけない情報を安全に管理できます。
プライマリキーは重複防止だけでなくNULLも禁止する
プライマリキーには、重複を禁止するだけでなくNULL値を許可しないという特徴があります。
例えば、以下のようなINSERT文を実行した場合、エラーになります。
INSERT INTO employees(employee_id, employee_name) VALUES(NULL, '山田');
これは、プライマリキーが必ず1つのデータを特定できる必要があるためです。
一方、UNIQUE制約でも重複防止はできますが、Oracle DatabaseではNULL値を許容できるという違いがあります。
PRIMARY KEYとUNIQUE制約の違い
重複を防ぐ目的では、PRIMARY KEYとUNIQUE制約は似ていますが、役割が異なります。
| 項目 | PRIMARY KEY | UNIQUE制約 |
|---|---|---|
| 重複値 | 不可 | 不可 |
| NULL値 | 不可 | 許可 |
| テーブル内の数 | 1つのみ | 複数設定可能 |
例えば、社員番号は必ず一意でNULLにならないためPRIMARY KEYが適しています。
一方、メールアドレスのように基本的には重複させたくないものの、未登録の場合がある項目ではUNIQUE制約を利用するケースがあります。
既存テーブルにプライマリキーを追加する方法
すでに作成済みのテーブルへプライマリキーを追加する場合は、ALTER TABLEを使用します。
例。
ALTER TABLE employees ADD CONSTRAINT employees_pk PRIMARY KEY(employee_id);
ただし、追加前に対象列に重複データやNULL値が存在するとエラーになります。
そのため、実際の運用では以下のような確認を行ってから設定します。
- 対象列に重複した値がないか確認する
- NULL値が登録されていないか確認する
- 不要なデータを整理する
複数列でプライマリキーを設定する場合
Oracle Databaseでは、1つの列だけではなく複数列を組み合わせてプライマリキーを作成することもできます。
例えば、注文履歴テーブルでは、注文番号だけではなく商品番号との組み合わせで一意になる場合があります。
例。
CREATE TABLE order_details (order_id NUMBER, product_id NUMBER, quantity NUMBER, PRIMARY KEY(order_id, product_id));
この場合、order_idとproduct_idの組み合わせが重複しないように管理されます。
まとめ|Oracleのプライマリキーは重複データを防ぐ重要な機能
Oracle Databaseでプライマリキーを設定すると、その列または列の組み合わせには一意性制約が適用され、同じ値を登録することはできなくなります。
さらに、NULL値も禁止されるため、データを正しく識別するための重要な役割を持っています。
重複を防ぐだけならUNIQUE制約でも対応できますが、テーブルの中心となる識別情報にはPRIMARY KEYを設定するのが一般的です。適切に利用することで、データの整合性を保った安全なデータベース設計が可能になります。

コメント