【初心者向け】主キーと一意制約をマスターしてデータベース設計をレベルアップ
データベース設計における「主キー」と「一意制約」の違い
データベース設計において、主キーと一意制約は、データの重複を防ぐために使用される重要な制約です。しかし、両者にはいくつかの重要な違いがあります。
主キー
- テーブル内で各レコードを一意に識別する必須**の列または列の組み合わせ
- 1つのテーブルに1つのみ設定できる
- NULL値を許可しない**
- 外部キーとの参照関係で参照される側
一意制約
- 1つのテーブル内のある列または列の組み合わせの値が重複することを許さない**制約
- NULL値を許可**できる
例
-
ユーザーテーブル
- 主キー:
user_id
(自動生成される数値) - 一意制約:
email
- 主キー:
-
商品テーブル
- 一意制約:
product_code
- 一意制約:
CREATE TABLE users (
user_id INT NOT NULL AUTO_INCREMENT,
email VARCHAR(255) UNIQUE,
PRIMARY KEY (user_id)
);
CREATE TABLE products (
product_id INT NOT NULL AUTO_INCREMENT,
product_code VARCHAR(20) UNIQUE,
PRIMARY KEY (product_id)
);
PostgreSQL
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL
);
CREATE TABLE products (
product_id SERIAL PRIMARY KEY,
product_code VARCHAR(20) UNIQUE NOT NULL
);
Microsoft SQL Server
CREATE TABLE users (
user_id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL
);
CREATE TABLE products (
product_id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
product_code VARCHAR(20) UNIQUE NOT NULL
);
Oracle Database
CREATE TABLE users (
user_id NUMBER(10) NOT NULL,
email VARCHAR2(255) UNIQUE NOT NULL,
CONSTRAINT users_pk PRIMARY KEY (user_id)
);
CREATE TABLE products (
product_id NUMBER(10) NOT NULL,
product_code VARCHAR2(20) UNIQUE NOT NULL,
CONSTRAINT products_pk PRIMARY KEY (product_id)
);
各コードの説明
CREATE TABLE
: テーブルを作成するuser_id
: 主キーemail
: 一意制約product_code
: 一意制約INT
: 整数型VARCHAR(n)
: 最大長n文字の文字列型SERIAL
: 自動生成される数値型IDENTITY(1,1)
: 自動生成される数値の開始値と増加値NUMBER(n)
: 最大長n桁の数値型NOT NULL
: NULL値を許可しないUNIQUE
: 一意制約PRIMARY KEY
: 主キー
- 上記のコードはあくまで例であり、実際のコードは必要に応じて変更する必要があります。
主キーと一意制約を設定する他の方法
GUI ツール
多くのDBMSには、テーブルの設計と管理を支援するGUIツールが用意されています。これらのツールを使用すると、主キーと一意制約を簡単に設定することができます。
DDL 文
DDL(Data Definition Language)文を使用して、主キーと一意制約を直接設定することができます。DDL 文は、データベースの構造を定義するために使用されます。
ALTER TABLE users ADD CONSTRAINT users_pk PRIMARY KEY (user_id);
ALTER TABLE products ADD CONSTRAINT products_unique UNIQUE (product_code);
- DDL 文を使用する場合は、DBMS の構文規則に注意する必要があります。
- GUI ツールは、初心者にとって使いやすい方法です。
主キーと一意制約の選択
主キーと一意制約のどちらを使用するかは、データの性質と設計要件によって決定されます。
主キーは、レコードを一意に識別するために使用されます。一意制約は、データの重複を防ぐために使用されます。
主キーを選択するべき場合
- テーブル内の各レコードを一意に識別する必要がある場合
一意制約を選択するべき場合
- データの重複を防ぎたい場合
- 主キーとして使用するほど重要ではない一意性の場合
database database-design