この記事では、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,Orange | Apple |
Taro | Orange |
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, 100 | Apple |
Taro, 100 | Taro |
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, Tokyo | Taro |
Hanako, Osaka | Hanako |
まとめ
データベースの正規化は非常に重要なステップであり、1NFから3NFまでの各ステップでテーブル構造がどのように変化するのかを理解することが重要です。この記事で説明した具体例を参考に、自分自身のデータベース設計に生かしてください
。
コメント