SQLにおける正規化の概要と具体的な方法


  1. 第一正規化 (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)
);
  1. 第三正規化 (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における正規化の概要と具体的な方法です。正規化を適切に行うことで、データの整理と効率的なデータ操作が可能となります。