
正規化:データベース設計の基本:その1
REV28
ブログ投稿しています。複数画像付き等最終版は此方から、ご覧ください。
DB:データベースの設計をされた事が有りますでしょうか?
或いは、色々なWEBシステムの裏でどの様にデータが構築されているかご存じでしょうか?
一般的に商用・公用のデータベースは基本的に正規化という手順を経て、最小化・最適化されてるハズです。
データベースの正規化を説明する前にまず、WEBのシステムが動作する上で、データベースがどの様に蓄積されているかを説明します。
例えば、誰かのユーザ情報を登録しようとした場合、ユーザ名は姓名で文字列を入力すると思いますが、住所などは”東京都”や”千葉県”等を選択する場合が有ると思います。
性別や、年代なども、選択肢が有れば、プルダウンメニューやラジオボタンで該当の情報を選択していると思います。
この場合、ユーザ登録をした後のデータベース上では住所の最初のテーブルには、”東京都”や”千葉県”、性別には”男”、”女”、年代には”30代”、”40代”等の文字列では無く、”1”とか”2”かの都道府県等に事前に割り当てられている数値が保存されているのが一般的です。
要するに、実際の住所等の文字列をサーバに送付してデータベースに登録するより、数字の1や2を送付した方が、送信文字列量が少なくなり、早く処理を終えられます。
従って、WEBシステムで、画面上、プルダウンメニュー・ラジオボタン等から何か選択して、登録等をする場合は、文字列そのものでは無く、該当の文字列を事前に定義した数値で扱われているのが一般的です。
WEBシステムではプルダウンの他に、ラジオボタンなど複数の選択肢から選択できる情報は、基本的にデータベース上では、数値化されているのが一般的と思います。
この様に文字列データを、事前に定義された数値で置き換えて扱う、これが正規化の一旦です。
尚、正規化されたデータベースでは、同じ文字列を複数持たない、即ち、ある種の文字列の定義テーブル、例えば住所の都道府県等は一つのテーブルに都道府県名とその定義数値のテーブルにのみ文字列と定義値の両方が存在し、それ以外のテーブルでは定義値しか存在させないルールが有ります。
また、更に、この他に主キーという定義をします。
主キーとはその名の通り、主となる情報の事で、この情報を扱う事・指定する事で主となる行全体のデータをユニークに扱える事を指します。
即ち、主キーというのは”ユニーク”にデータを扱う為のキー情報になります。
概ね、正規化は三段階ほどの手順を経て、この主キーを洗い出し、主キーに沿って各テーブルの構成を考えているハズです。
そして最終的にGUIでメニューを選択して、情報を選択して、データベース上にできているテーブルに選択されたデータを保存する場合は、概ね数値化された情報を保存する事になります。
正規化を使用する意味ですが、正規化をする事で、データベースを書き換えても矛盾が起こらないとされています。また、不要な情報のダブリ等を抑制できる事も正規化のメリットとされています。
これは安易にテーブルを定義すると、追加・変更・削除を経て、テーブル間のつじつまが合わなくなる場合が有るからとされています。
また、当然ですが、情報のダブリがあると、その分、最低限な場合と比較して、必要以上にデータを書き込む必要が有ります。
皆さんは、WEBシステムを使われていると思いますが、背後でどの様にデータが動いているのか、少しは感じて頂けましたでしょうか?
講師の経験が、皆様のお役に立てれば幸いです。