データベース設計の中核となる「PRIMARY KEY」制約について学びます。
SQL Serverでは、PRIMARY KEY制約を使用してテーブル内の各行を一意に識別することが可能です。
本記事では、PRIMARY KEYの役割、作成方法、そしてユニーク性を維持するための注意点を解説します。
PRIMARY KEYとは?
PRIMARY KEYは、データベース設計において以下の特性を持つ列(または列の組み合わせ)に設定されます。
- 一意性:各行を一意に識別します。同じ値を持つ行を許容しません。
- NOT NULL:PRIMARY KEYとして指定する列は必ず値を持つ必要があります(NULL値を許容しません)。
PRIMARY KEYの重要性
データベース設計では、行(レコード)を一意に識別できないとデータの整合性が損なわれます。PRIMARY KEYを設定することで、以下のような利点があります:
- データの一貫性を維持:同じデータが重複することを防ぐ。
- 高速な検索とアクセス:インデックスが自動作成され、クエリ性能が向上する。
- リレーションの確立:他のテーブルの外部キー(FOREIGN KEY)と組み合わせてリレーショナルデータベースの構造を強化する。
PRIMARY KEYの作成方法
SQL Serverでは、PRIMARY KEYを以下の方法で作成できます。
テーブル作成時に設定
新しいテーブルを作成する際、PRIMARY KEYを定義できます。
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
HireDate DATE
);
解説
EmployeeID列にPRIMARY KEY制約を設定しました。この列は一意の値を持つ必要があり、NULL値を許容しません。
既存テーブルに追加
既存のテーブルにPRIMARY KEYを後から追加することも可能です。
ALTER TABLE Employees
ADD CONSTRAINT PK_EmployeeID PRIMARY KEY (EmployeeID);
解説
PK_EmployeeIDという名前のPRIMARY KEY制約をEmployeeID列に設定しています。
複数列を組み合わせて設定
複数列を組み合わせてPRIMARY KEYを設定することもできます。
CREATE TABLE Orders (
OrderID INT,
ProductID INT,
Quantity INT,
PRIMARY KEY (OrderID, ProductID)
);
解説
OrderIDとProductIDの2列を組み合わせてPRIMARY KEYを設定しました。この場合、同じOrderIDとProductIDの組み合わせは一意でなければなりません。
PRIMARY KEYの注意点
- NULL値の扱い
PRIMARY KEY列にはNULL値を設定できません。列データが未入力になる可能性がある場合は、代わりにUNIQUE
制約を使用します。 - 重複データの禁止
PRIMARY KEYは一意性を強制します。データ挿入時に重複した値があるとエラーになります。 - 複数のPRIMARY KEY制約は不可
1つのテーブルにPRIMARY KEY制約は1つしか設定できません。ただし、複数列をまとめて1つのPRIMARY KEYにすることは可能です。
PRIMARY KEYの削除方法
PRIMARY KEY制約を削除するには、制約名が必要です。以下の例を示します。
ALTER TABLE Employees
DROP CONSTRAINT PK_EmployeeID;
解説
先ほど設定したPK_EmployeeID制約を削除しています。削除後は、EmployeeID列に一意性が保証されなくなります。
演習問題
学んだ内容を基に演習問題に挑戦してみましょう。
問題1:テーブル作成
以下の要件に従ってCustomersテーブルを作成してください。
問題2:PRIMARY KEYの追加
以下の既存テーブルProductsに対して、ProductID列をPRIMARY KEYに設定してください。
CREATE TABLE Products (
ProductID INT,
ProductName NVARCHAR(100),
Price DECIMAL(10, 2)
);
問題3:複合PRIMARY KEYの設定
以下のOrderDetailsテーブルに対して、OrderIDとProductIDの2列を組み合わせてPRIMARY KEYを設定してください。
CREATE TABLE OrderDetails (
OrderID INT,
ProductID INT,
Quantity INT
);
解答例
問題1の解答
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
Email NVARCHAR(100)
);
問題2の解答
ALTER TABLE Products
ADD CONSTRAINT PK_ProductID PRIMARY KEY (ProductID);
問題3の解答
ALTER TABLE OrderDetails
ADD CONSTRAINT PK_OrderDetails PRIMARY KEY (OrderID, ProductID);
おわりに
本記事では、SQL ServerのPRIMARY KEY制約について、基礎から作成方法、注意点まで解説しました。
データベース設計でPRIMARY KEYを正しく設定することは、データの一貫性と性能向上に不可欠です。この記事で学んだ内容を実践し、正確なデータ管理を目指しましょう!