株式会社コーソル
COLUMN

コーソルのお役立ちコラム

コーソルでは経験豊かなエンジニアが、Oracle Databaseに関するお役立ち情報を発信しています。
データベースのチューニングや設定にお役立ていただけます。

未分類

公開日  更新日

DB設計の正規化と手順|押さえておきたいメリット・デメリット

「DB設計の正規化ってどんな取り組み?」「メリットやデメリットがあれば教えて欲しい」などと考えていませんか。詳細がわからず、困っている方は多いでしょう。DB設計の正規化は、データを整合的に扱うため行われる取り組みです。矛盾を防げる、データを管理しやすくなるなどのメリットがあります。ここでは、DB設計における正規化の概要を解説するとともに正規化のメリット、デメリット、正規化の手順を紹介しています。理解を深めたい方は参考にしてください。

データベースの正規化とは

簡単に説明すると、データの重複をできる限りなくして、データを整合的に扱えるように設計することです。具体的には、データを分割したり整理したりします。正規化の主な目的は矛盾を防ぐことです。矛盾の例として以下のものがあげられます。

部活名 顧問名 生徒名
野球部 岩井 田中
野球部 岩井 佐々木
サッカー部 大島 伊東

人事異動で、野球部の顧問が「岩井」から「山本」に代わったとします。顧問名に更新漏れがあると矛盾が生じてしまいます。

部活名 顧問名 生徒名
野球部 山本 田中
野球部 岩井(※) 佐々木
サッカー部 大島 伊東

野球部に所属している「田中」の顧問は「山本」、「佐々木」の顧問は「岩井」です。データが重複する上記のテーブルは、矛盾が発生しやすいといえるでしょう。設計により、このようなトラブルを防ぐことが正規化と考えられます。

【関連記事】:DBの正規化とは?メリット・デメリットを解説

データベースの正規化のメリット

データベースの正規化には、さまざまなメリットがあります。主なメリットとして以下の3点があげられます。

メリット①データの整合性をとれる

正規化によりデータの整合性をとりやすくなります。ここでいう整合性は、データの矛盾を防ぐことといえるでしょう。たとえば、以下のデータがあったとします。

生徒ID 生徒名 部活ID 部活名 顧問名
1 田中 101 野球部 岩井
2 佐々木 101 野球部 岩井
3 伊藤 102 サッカー部 大島

前述のとおり、正規化を行っていないと矛盾が生じやすくなります。たとえば、野球部の顧問が「岩井」から「山本」に代わると、野球部に所属するすべての生徒の行を変更しなければなりません。抜けや漏れが発生すると矛盾が生じてしまいます。上記のテーブルを、以下のように分割すると更新の手間を省けます。

生徒ID 生徒名 部活ID
1 田中 101
2 佐々木 101
3 伊藤 102
部活ID 部活名 顧問名
101 野球部 岩井
102 サッカー部 大島

また、抜けや漏れも発生しにくくなる、つまりデータの整合性を取りやすくなります。

メリット➁データが管理しやすい

正規化を行うことで、データを管理しやすくなります。たとえば、以下のデータがあったとします。

ID 名称 分類
1 トマト 野菜

上記では「オレンジ」と入力するところを、誤って「トマト」と入力しました。「名称」を「オレンジ」に変更するだけでよいと考えてしまいがちですが、この場合は「分類」の変更も必要です。「分類」を「果物」に変更すれば、データの整合性をとれます。簡単に修正できますが、テーブルが複雑になるとどうでしょうか。抜けや漏れが発生して、データに矛盾が生じる恐れがあります。したがって、上記のテーブルは、データの管理に適していません。正規化で、テーブルの分割などをすると、データを管理しやすくなります。

メリット③データを柔軟に変更できる

データを変更しやすくなる点も正規化のメリットです。先ほどのテーブルをもとに解説します。

生徒ID 生徒名 部活ID 部活名 顧問名
1 田中 101 野球部 岩井
2 佐々木 101 野球部 岩井
3 伊藤 102 サッカー部 大島

上記のテーブルだと、部活名や顧問名が変更になった場合に、該当するすべての生徒の行でこれらの名称を変更しなければなりません。手間がかかるうえ、ミスも発生しやすくなります。次のようにテーブルを分割すると、変更する箇所が1行だけになります。

生徒ID 生徒名 部活ID 部活名 顧問名
1 田中 101 野球部 岩井
2 佐々木 101 野球部 岩井
3 伊藤 102 サッカー部 大島
部活ID 部活名 顧問名
101 野球部 岩井
102 サッカー部 大島

例えば、野球部の顧問が「岩井」から「山本」に代わった場合は「顧問名」変更するだけで済みます。「生徒ID」「1」や「2」の行を変更する必要はありません。正規化を行うと、データを柔軟に変更できるようになります。

データベースの正規化のデメリット

データベースの正規化には、注意したいデメリットもあります。代表的なデメリットとしてあげられるのがパフォーマンスの低下です。テーブルを分割すると、結合操作が必要になります。この影響でパフォーマンスが低下してしまうことがあります。正規化は、データの整合性を優先する取り組みと考えられるでしょう。

この問題に対処するため、正規化を意図的に行わないことを検討できます。ただし、正規化を行っていないテーブルは、更新作業を行いにくいうえ、矛盾も生じやすくなります。大きなデメリットがあるため、積極的に勧められるわけではありません。一般的には、明確な理由がない限り正規化を行うほうがよいと考えられています。

【関連記事】:データベースの種類は?役割やメリット・課題について詳しく解説

正規化の手順

正規化の段階には第一~第五正規形などがあります。ちなみに、正規化を行っていないものを非正規形といいます。ここでは、第一~第三正規形について解説します。

第一正規形

簡単に説明すると、テーブル内の1つのセル(ここでは行と列が重なる1つのマス)に1つの値を設定している状態(繰り返しがない状態)です。たとえば、以下のテーブルがあったとします。

注文ID ユーザーID 顧客名 住所 商品ID 商品名 注文数
101 1001 田中 東京都千代田区 10

52

15

Tシャツ

ソックス

バッグ

1

2

1

1つのセルに複数の値を含むため、上記のテーブルは非正規形といえます。第一正規形にしたい場合は、主キー(注文ID・商品ID)を設定して、繰り返しているデータを、別のテーブルに分けるとよいでしょう。

注文テーブル

注文ID ユーザーID 顧客名 住所
101 1001 田中 東京都千代田区

明細テーブル

注文ID 商品ID 商品名 注文数
101 10 Tシャツ 1
101 52 ソックス 2
101 15 バッグ 1

1つのセルに1つの値を設定している上記のテーブルは第一正規形といえます。

第二正規形

簡単に説明すると、部分関数従属をなくした状態です。部分関数従属は、複数の主キーが存在するテーブルで、いずれかの主キーだけで決まる項目がある状態といえるでしょう。以下のテーブルにおける主キーは注文IDと商品IDです。

注文テーブル

注文ID ユーザーID 顧客名 住所
101 1001 田中 東京都千代田区

明細テーブル

注文ID 商品ID 商品名 注文数
101 10 Tシャツ 1
101 52 ソックス 2
101 15 バッグ 1

商品IDが決まると商品名も決まります(=部分関数従属)。したがって、この状態を解消する必要があります。

注文テーブル

注文ID ユーザーID 顧客名 住所
101 1001 田中 東京都千代田区

明細テーブル

注文ID 商品ID 数量
101 10 1
101 52 2
101 15 1

商品テーブル

商品ID 商品名
10 Tシャツ
52 ソックス
15 バッグ

除期の分割により部分関数従属はなくなりました。

第三正規形

簡単に説明すると、推移関数従属がない状態です。推移関数従属は、主キー以外の項目でテーブル内の一部の項目が決まる状態です。つまり、主キーAによりBが決まり、BによりCが決まる状態といえるでしょう。以下の注文テーブルでは、ユーザーIDにより顧客名と住所が決まります。

注文テーブル

注文ID ユーザーID 顧客名 住所
101 1001 田中 東京都千代田区

したがって、ユーザーIDを主キーに設定してテーブルを分割すると第三正規形にできます。

顧客テーブル

ユーザーID 顧客名 住所
1001 田中 東京都千代田区

注文テーブル

注文ID ユーザーID
101 1001

注文明細テーブル

注文ID 商品ID 数量
101 10 1
101 52 2
101 15 1

商品テーブル

商品ID 商品名
10 Tシャツ
52 ソックス
15 バッグ

以上のテーブルは、第三正規形と考えられます。

正規化はDB設計に欠かせない取り組み

ここでは、DB設計における正規化について解説しました。正規化は、設計でデータの重複をできる限りなくすことです。データの整合性をとれる、データを管理しやすくなる、データを変更しやすくなるなどのメリットがあります。DB設計に欠かせない取り組みといえるでしょう。正規化には第一~第五正規形などがあります。順を追って進めていくことが大切です。この記事を参考に、正規化に取り組んでみてはいかがでしょうか。

この記事の監修者

監修者の写真

舛井 智行 (ますい ともゆき)

営業本部 企画&マーケティング部 次長

《資格》

Oracle Master Gold、Oracle RAC Expert、Linux Expert、LPIC Level1、Dbvisit Standby Certified Associate、基本情報技術者

《略歴》

2004年コーソル入社。2019年まで一貫してOracle Databaseの設計・構築・運用のサービス提供に従事。リモートDBAやリモート監視のサービス化、働き方改革プロジェクトで人事制度改革を手掛ける。2019年からライセンス販売強化のため企画&マーケティング部に異動。DbvisitやToad、DPAの取扱開始、販売促進活動を推し進め、ライセンス販売事業の売上拡大に注力中。

《主な著書》

オラクルマスター教科書 Gold DBA Oracle Database AdministrationⅡ
オラクルマスター教科書 Silver DBA Oracle Database Administration I
オラクルマスター教科書 Silver SQL Oracle Database SQL
Oracleの基本 ~データベース入門から設計/運用の初歩まで
プロとしてのOracle入門
Oracle Database 10g Oracle Enterprise Manager 逆引きクイックリファレンス

《担当者様からの一言》

コーソルはOracle Databaseの技術力において日本有数の知見を有すると自負しています。Oracle Masterの最高峰資格である『Oracle Master Platinum』の取得者数も日本No.1です。Oracle Databaseのことはもちろん、それ以外のDBについてもリモートDBAサービスを始めとした様々なサービス、製品を駆使してお客様のお困りごとを解消いたします。お困りごとがあればコーソルまでご相談ください。

監修者の写真

峯岸 隆一 (みねぎし りゅういち)

インフラソリューション部 市ヶ谷クラウドサービスチーム シニアエキスパート

《資格》

Oracle Master Gold、ORACLE MASTER Platinum、Oracle RAC Expert、
Oracle Database Cloud Service Oracle Infrastructure as a Service Cloud 2017 Implementation Essentials、
Oracle Cloud Infrastructure 2018 Architect Associate、
Oracle Cloud Infrastructure 2019 Architect Professional、
AWS Certified Solutions Architect – Associate、OSS-DB Silver、
MySQL 5.6 Database Administrator、基本情報技術者、テクニカルエンジニア(データベース)

《略歴》

2006年コーソル入社。2021年までOracle Databaseを中心にMySQLやGoldenGateなど、多岐にわたる製品のサポート業務に従事。2021年から企画&マーケティング部に異動し、Nutanix NDBサービス化、Qlik Replicateサービス化、AWS、OCIなど様々な製品のサービス化、クラウド環境上の製品検証、ブログ執筆を手掛ける。2023年からOCI技術に磨きをかけるべくOCI基盤の設計・構築業務を遂行中 。

《主な著書》

オラクルマスター教科書 Gold DBA Oracle Database AdministrationⅡ
オラクルマスター教科書 Silver DBA Oracle Database Administration I
オラクルマスター教科書 Silver SQL Oracle Database SQL  Oracleの基本 ~データベース入門から設計/運用の初歩まで

《担当者様からの一言》

コーソルはOracle Database製品および周辺製品において特化した技術力を有している会社です。また、育成にも力を入れており、新卒などOracle Databaseの知識がないエンジニアでも数年でOracle Master Platinumを取得するほどのエンジニアに育て上げることに成功しています。クラウド分野(AWS、Oracle Cloud)にも積極的に進出しておりますので、Oracle Databaseに関するサービスをご要望であればプラットフォーム問わず対応できるコーソルにご連絡下さい。

TOP