SQL ServerのPRIMARY KEY制約:一意性を保つテーブル設計と作成方法

データベース設計の中核となる「PRIMARY KEY」制約について学びます。

SQL Serverでは、PRIMARY KEY制約を使用してテーブル内の各行を一意に識別することが可能です。

本記事では、PRIMARY KEYの役割、作成方法、そしてユニーク性を維持するための注意点を解説します。


PRIMARY KEYとは?

PRIMARY KEYは、データベース設計において以下の特性を持つ列(または列の組み合わせ)に設定されます。

  1. 一意性:各行を一意に識別します。同じ値を持つ行を許容しません。
  2. 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の注意点

  1. NULL値の扱い
    PRIMARY KEY列にはNULL値を設定できません。列データが未入力になる可能性がある場合は、代わりにUNIQUE制約を使用します。
  2. 重複データの禁止
    PRIMARY KEYは一意性を強制します。データ挿入時に重複した値があるとエラーになります。
  3. 複数の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テーブルを作成してください。

列名
  • CustomerID:整数型(INT)、PRIMARY KEY
  • FirstName:文字列型(NVARCHAR(50))
  • LastName:文字列型(NVARCHAR(50))
  • Email:文字列型(NVARCHAR(100))

問題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を正しく設定することは、データの一貫性と性能向上に不可欠です。この記事で学んだ内容を実践し、正確なデータ管理を目指しましょう!