SQLでのデータベース正規化のステップと具体例

この記事では、SQLにおけるデータベース正規化のステップと具体例について解説します。正規化はデータベース設計において非常に重要なプロセスであり、効率的なデータベースを設計するためには避けて通れません。以下では1NF(第一正規形)から3NF(第三正規形)までのステップを具体的なデータと共に説明します。

目次

正規化とは?

正規化は、データベースの効率性を高めるために行うプロセスです。このプロセスを通じて、データの重複を排除し、データ整合性を維持するための手法を確立します。

1NF(第一正規形)

定義

1NFは、すべての列がアトミック(分解できない)な値を持つテーブル形式に変換することです。

具体例

-- 非正規化されたテーブル
CREATE TABLE Orders (
    OrderID INT,
    ProductNames TEXT,
    CustomerName TEXT
);
INSERT INTO Orders VALUES (1, 'Apple,Orange', 'Taro');
INSERT INTO Orders VALUES (2, 'Banana', 'Hanako');

このテーブルを1NFにすると、以下のようになります。

-- 1NFに変換
CREATE TABLE Orders_1NF (
    OrderID INT,
    ProductName TEXT,
    CustomerName TEXT
);
INSERT INTO Orders_1NF VALUES (1, 'Apple', 'Taro');
INSERT INTO Orders_1NF VALUES (1, 'Orange', 'Taro');
INSERT INTO Orders_1NF VALUES (2, 'Banana', 'Hanako');
非正規化テーブル1NFテーブル
Apple,OrangeApple
TaroOrange
テーブルの比較1

2NF(第二正規形)

定義

2NFは、すべての部分関数従属が排除されたテーブル形式に変換することです。

具体例

-- 1NFテーブル
CREATE TABLE Orders_1NF (
    OrderID INT,
    ProductID INT,
    ProductName TEXT,
    Price INT,
    CustomerName TEXT
);
INSERT INTO Orders_1NF VALUES (1, 101, 'Apple', 100, 'Taro');
INSERT INTO Orders_1NF VALUES (1, 102, 'Orange', 50, 'Taro');

このテーブルを2NFにすると、以下のようになります。

-- 2NFに変換
CREATE TABLE Orders_2NF (
    OrderID INT,
    ProductID INT,
    CustomerName TEXT
);
INSERT INTO Orders_2NF VALUES (1, 101, 'Taro');
INSERT INTO Orders_2NF VALUES (1, 102, 'Taro');

CREATE TABLE Products (
    ProductID INT,
    ProductName TEXT,
    Price INT
);
INSERT INTO Products VALUES (101, 'Apple', 100);
INSERT INTO Products VALUES (102, 'Orange', 50);
1NFテーブル2NFテーブル
Apple, 100Apple
Taro, 100Taro
テーブルの比較2

3NF(第三正規形)

定義

3NFは、すべての推移的関数従属が排除されたテーブル形式に変換することです。

具体例

-- 2NFテーブル
CREATE TABLE Orders_2NF (
    OrderID INT,
    ProductID INT,
    CustomerID INT,
    CustomerName TEXT,
    CustomerAddress TEXT
);
INSERT INTO Orders_2NF VALUES (1, 101, 1, 'Taro', 'Tokyo');
INSERT INTO Orders_2NF VALUES (2, 102, 2, 'Hanako', 'Osaka');

このテーブルを3NFにすると、以下のようになります。

-- 3NFに変換
CREATE TABLE Orders_3NF (
    OrderID INT,
    ProductID INT,
    CustomerID INT
);
INSERT INTO Orders_3NF VALUES (1, 101, 1);
INSERT INTO Orders_3NF VALUES (2, 102, 2);

CREATE TABLE Customers (
    CustomerID INT,
    CustomerName TEXT,
    CustomerAddress TEXT
);
INSERT INTO Customers VALUES (1, 'Taro', 'Tokyo');
INSERT INTO Customers VALUES (2, 'Hanako', 'Osaka');
2NFテーブル3NFテーブル
Taro, TokyoTaro
Hanako, OsakaHanako
テーブルの比較3

まとめ

データベースの正規化は非常に重要なステップであり、1NFから3NFまでの各ステップでテーブル構造がどのように変化するのかを理解することが重要です。この記事で説明した具体例を参考に、自分自身のデータベース設計に生かしてください

コメント

コメントする

目次