データベース中級者必見!その2〜データベースの作成と正規化〜
2015/09/28
はじめに
前回から中級編に入り、トランザクションとDCLについてご紹介いたしました。
データベース中級者必見!その1〜トランザクションとDCL〜
これらはすでにデータベースにテーブルがあって、はじめて使用することができるSQLです。
ここからは、データベース内でテーブルを作成・変更・削除するSQLを紹介します。
データベースにテーブルを作成することを「テーブルを定義する」と呼びます。最近では、データベースを操作するツールを用いて、GUI上でテーブルの定義を行うことができる環境が多くあります。
ただ、本連載では、実際にテーブルを定義するSQLを紹介します。データベースの知識がさらに深まり、その他の操作についても、より理解した形で行うことができるからです。
テーブルを定義したり、テーブルを変更、削除する操作はDDL(Data Difinition Language)を使って行います。
今回は、DDLの具体的な紹介の前に、もう一度RDBMSにおけるテーブル構造を紹介いたします。
RDBMSにおけるデータベースの構造
データベースの作成
リレーショナルデータベースでは、まず、データベースオブジェクトを作成するための領域を確保する必要があります。これはスキーマやデータベースと呼ばれます。
次のSQLを用いてデータベースを作成します。
[sql]CREATE DATABASE データベース名[/sql]
※これは、MySQLの場合のSQLで他のRDBMSでは違うSQLの場合もあります。
正規化
RDBMSでは、データベース内でデータを2次元の表形式で管理します。これがテーブルです。データベース内には、複数のテーブルを定義することができ、外部キーを用いてそれらを関連付けてデータを格納します。RDBMSの大きな特徴です。
RMBMS内におけるそれぞれのテーブルは正規化された形で定義されます。正規化とは、テーブルをある一定の規則に基づく形で設計し、データの操作や管理を行いやすくすることです。正規化には第5段階まで存在しますがリレーショナルデータベースにおいては、一般的に第3正規化にまで準拠していれば良いとされています。
社員を管理するテーブルの例をもとに、第1段階から第3段階までの正規化について考えてみましょう。次の「社員データカード」があるとします。
このデータはそのままテーブルにすると次のようになります。ただし、列名やテーブル名については新たに定義しました。
テーブル「employee」正規化されていない形
これが正規化されていないテーブルです。
第1正規化
先ほどの正規化されていないテーブルでは、一つのフィールドに複数の値が登録されていました。
これをひとつのフィールドに一つの値を登録する形に変更したものが、第1正規化のテーブルです。
第1正規化されたテーブル
第2正規化
第1正規化にテーブルを変更することでかなりすっきりとし、これまで見てきたテーブルらしくなりました。
しかし、たとえば田中健太郎さんの給与が200,000円に変更されたとしたら合計3つの列に対して変更を加えなければならず、効率の良いテーブルではありません。
そこで、第2正規化への変更を行います。
先ほどのテーブルでは、emp_id列の値を定めればemp_name,emp_age,emp,sal,sex_id,sex_nameの列の値が、emp_idとlic_id列の値を定めればlic_name列の値が、それぞれ一意(ひとつに)決まります。
第2正規化では、テーブルの主キーとそれに従属する値の関係にテーブルを分割します。
第2正規化されたテーブル
第3正規化
第3正規化では、主キー以外の値に従属する列の値をテーブルに分割します。
先ほどの第2正規化のemloyeeテーブルでは、sex_id列の値を定めればsex_name列の値が一意的に決まります。同じようにemp_licテーブルではlic_id列の値が定まればlic_name列の値が定まります。
第3正規化されたテーブル
第3正規化までの変更を行うと、合計4つのテーブルに分割されました。データが「バラバラ」に保存されてしまったという印象をうけるかもしれませんが、SQLを用いて適当に結合の処理を行うことで、思い通りの結果セットを取得することができます。
また、データの変更が起こったときに変えなければいけない箇所が最小にとどめられており、データの不整合が起きにくい仕組みが実現されています。
リレーショナルデータベースでは、このような正規化を行ってデータベース内にテーブルを作成していきます。
はじめに
今回は、データベースの作成と、正規化についてご紹介いたしました。次回は、テーブルの関係を図に表すER図や、定義情報を示すテーブル定義書について紹介いたします。