つーくん、第3正規形に挑戦!正規化って意外と難しい

こんにちは、つーくんです。

59歳からデータベーススペシャリスト試験合格を目指して勉強しています。

今回は、データベースの基本である**「正規化」**に挑戦しました。

第1正規形、第2正規形、第3正規形……。

名前だけ見ると難しそうですが、実際に問題を解きながら考えてみると、少しずつ意味が分かってきました。

ただ、やっぱり難しい!

今回は、つーくんが実際に考えた内容を記録しておきます。

そもそも正規化って何?

正規化とは、簡単に言えば、

「データの重複や矛盾が起きにくいように、テーブルを整理すること」

だと理解しています。

例えば、受注データを全部一つの表に入れてしまうと、同じ顧客名や商品名が何度も登場します。

そこで、顧客は顧客表、商品は商品表というように、データの関係を考えながらテーブルを分けていきます。

でも、ただ分ければいいわけではありません。

ここで重要になるのが**「関数従属」**です。

今回考えた受注表

今回の問題では、受注に関するデータについて考えました。

登場する主な項目は、

受注番号、受注日、顧客番号、顧客名、商品番号、商品名、商品分類番号、商品分類名、数量

などです。

このデータを見ながら、

「どの項目が、どの項目によって決まるのか?」

を考えていきました。

例えば、

顧客番号 → 顧客名

商品番号 → 商品名

商品分類番号 → 商品分類名

という関係があります。

「顧客番号が決まれば顧客名が決まる」

これが関数従属ということですね。

第2正規形を考えてみる

問題を解きながら、つーくんは次のようなテーブル分割を考えました。

顧客表

顧客番号、顧客名

商品表

商品番号、商品名、商品分類番号、商品分類名

受注表

受注番号、受注日、顧客番号、商品番号、数量

ここまでは比較的イメージしやすかったです。

ところが、商品表をよく見ると気になるところがあります。

商品番号から商品分類番号が決まり、

さらに、

商品分類番号から商品分類名が決まります。

つまり、

商品番号 → 商品分類番号 → 商品分類名

という関係があります。

ここで登場したのが、

「推移的関数従属」

です。

第3正規形へ!

商品分類名は、商品番号から直接決まるというより、商品分類番号を経由して決まっています。

そこで商品表をさらに分けます。

商品表

商品番号、商品名、商品分類番号

商品分類表

商品分類番号、商品分類名

こうすることで、

商品分類番号と商品分類名の関係を、商品表から切り離すことができます。

これが第3正規形への分解です。

最初は、

「商品分類名も商品表に入れておけばいいのでは?」

と思いました。

でも、同じ商品分類にたくさんの商品があったら、商品分類名を何度も保存することになります。

さらに商品分類名を変更するときには、複数のデータを変更しなければなりません。

そこで、

商品分類番号 → 商品分類名

を独立したテーブルにする。

なるほど。

これが正規化する理由の一つなんですね。

実際に問題を解くと理解が変わる

参考書を読んで、

「第3正規形とは推移的関数従属を排除したもの」

と覚えるだけなら簡単です。

でも、

「では、この表のどこが推移的関数従属なの?」

と聞かれると急に難しくなります。

今回、自分でテーブルを分解してみたことで、

商品番号 → 商品分類番号 → 商品分類名

という具体例と結び付けて考えられるようになりました。

これは大きな収穫でした。

今日覚えておきたいこと

今回の勉強で、つーくんが特に覚えておきたいのは、

「どの項目が、何によって決まるのかを見る」

ということです。

正規化の問題を見たら、いきなりテーブルを分割するのではなく、

「Aが決まればBが決まる」

という関係を探してみる。

そして、

主キー → 項目

だけでなく、

主キー → A → B

となっていないか確認する。

この考え方を身につけたいと思います。

まだまだ正規化を練習します

第3正規形まで勉強しましたが、まだ完全に理解できたとは思っていません。

問題の形が変わったら、また迷うと思います。

だから次は、違うパターンの正規化問題にも挑戦してみます。

59歳のつーくん。

まだ第2回ですが、少しずつデータベースの考え方が面白くなってきました。

データベーススペシャリスト合格への道は、まだ始まったばかりです!

コメント

タイトルとURLをコピーしました