- 第一正規化 (1NF): 第一正規化では、重複するデータを排除し、1つのデータ項目に1つの値が格納されるようにします。例えば、顧客情報を管理するテーブルでは、顧客の名前、住所、電話番号などのデータ項目を分割し、それぞれ別のテーブルに格納します。
-- 顧客情報テーブル
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50),
customer_address VARCHAR(100),
customer_phone VARCHAR(20)
);
-- 顧客名テーブル
CREATE TABLE customer_names (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(50)
);
-- 顧客住所テーブル
CREATE TABLE customer_addresses (
customer_id INT PRIMARY KEY,
customer_address VARCHAR(100)
);
-- 顧客電話番号テーブル
CREATE TABLE customer_phones (
customer_id INT PRIMARY KEY,
customer_phone VARCHAR(20)
);
-- 注文情報テーブル
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);
-- 注文明細テーブル
CREATE TABLE order_details (
order_id INT,
product_id INT,
quantity INT,
price DECIMAL(10,2),
PRIMARY KEY (order_id, product_id),
FOREIGN KEY (order_id) REFERENCES orders (order_id)
);
- 第三正規化 (3NF): 第三正規化では、テーブル内の非キー項目が他の非キー項目に関連する場合、それらを別のテーブルに分割します。例えば、従業員情報を管理するテーブルでは、従業員の部署や職位の情報を別のテーブルに格納します。
-- 従業員情報テーブル
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department_id INT,
position_id INT,
FOREIGN KEY (department_id) REFERENCES departments (department_id),
FOREIGN KEY (position_id) REFERENCES positions (position_id)
);
-- 部署テーブル
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(50)
);
-- 職位テーブル
CREATE TABLE positions (
position_id INT PRIMARY KEY,
position_name VARCHAR(50)
);
以上が、SQLにおける正規化の概要と具体的な方法です。正規化を適切に行うことで、データの整理と効率的なデータ操作が可能となります。