
第三正規化って何?
データベースを勉強しているうちに、混乱してきた・・・。
という人向けの記事です。
第三正規化とは、主キー以外のデータの繰り返しを整理することです。
第一正規化では、はみ出ているデータを整理。すべてのデータが同じ形となるように整理しました。
第二正規化は、正規化の第二段階。
主キーにまつわる項目で、ダブってたり、回りくどい部分をなくすのが目的です。
そして今回の第三正規化は、正規化の最終段階で、「主キー以外のデータの繰り返しを整理すること」です。


実際のお仕事では、主キー以外の項目の方が圧倒的に多いので。
最後まで、しっかりと整理してあげたほうが見やすくなります!
第二正規化を理解している人からすれば、「第二正規化でやったことを主キー以外の項目でもやるのが第三正規化」と解釈した方がわかりやすいかもです。
第二正規化までのおさらい
正規化のそもそもの考えと、第二正規化までのおさらいを軽くします。
(くどいかもだけど、今からのお話がわかってれば、第三正規化は楽勝なので。)
正規化とは?
その前に、正規化について、まだイマイチという人は、ざっと読んでくださいまし。
※第一正規化の記事でも解説しているので、飛ばしてもらって大丈夫です。
正規化についてざっくりと言ってしまえば、「余分だったり、ダブってたり、回りくどい部分をなくすこと」です。

試験的には「冗長性(じょうちょうせい)をなくす」みたいに言ったりします!
主キーとは?

それと、主キーって何?
主キーは、「他と、かぶることのないデータ」です。
例えば、社員番号とか、学生番号が身近でわかりやすいです。
社員が何人になろうが、学生が入学しようが、「番号」が他の人とかぶることは、あり得ません。

例えば、ある会社の社員番号で、「1000001」という番号があったとして。
「1000001」という番号は誰のことを言っているのか?
番号から、社員の名前が、わかるようになっています。
もし、「1000001」が、AくんとBさんの2人を指していて。
仲良く(?)番号を共有していて、AくんとBさんを区別できないとしたら。
「社員番号の意味ねぇじゃん」となりますよね(´▽`*)。
なので、主キーとなるデータは、他とかぶることは、絶対にありえません。
第二正規化では、主キーにくっつく、データの繰り返しを整理した
第二正規化のおさらいになりますが、他とかぶることのない、主キーにくっつく、データの繰り返しを整理します。
すでに、第二正規化の記事で説明しているので、説明は、かんたんにします。

主キーの社員番号にひもづく、Aさん・Bさん・Cさんの名前を、データベースの別の箱で管理。
別の箱で管理してる社員名だけを変更すれば、「1000001からとれてくる社員名はAさん」となるわけです。
同じことを、担当商品コードでもやってあげて、完成形がこんな感じに。

第三正規化とは、主キー以外のデータも整理する
- 「社員番号」(主キーで絶対にかぶらない)
- 「部署コード」
- 「部署名」(部署コードから必ずわかるもの)
- 「担当商品コード」(主キーで絶対にかぶらない)
というデータベースのテーブル(箱)があるとき。
社員番号と担当商品コードは、第二正規化で整理しました。

あと正規化していないのが、部署コード。
部署コードから部署名がわかるので、主キーではないけれども、整理することができます。これが第三正規化。
部署名が変わったときに変更するのが大変
たとえば、データベースに登録している部署名を、「第一営業部から、関東第一営業部に変更したい!」となったとします。
部署名の「第一営業部」の部分は、すべて「関東第一営業部」に変えないといけないですよね。
今の例だと「第一営業部」が2つしかないけど、もし100万件とか、めっちゃ多くのデータがあったら。
全部を「第一営業部」から「関東第一営業部」に変えるのは、大変だしミスります。
あるいは、

組織が大きく変わったから、第二・第三営業部も変わる!

営業部だけじゃなくて、マーケティング部もだ!
みたいに、いろんな部署の名称も変えないといけなかったりしたら、しらみつぶしに変えていくのは骨が折れます。
しらみつぶしに変更するのは大変だから社員名は別の箱で管理

それじゃあ、どうするの?

部署名を管理する箱を作ってしまえばいい!
さて、第二正規化がわかっている人からしたら、「なんだ、第三正規化、余裕じゃん」となるかと。

第三正規化をする前は、いちいち、
「801,第一営業部|801,第一営業部|802,第二営業部|803,第三営業部|803,第三営業部」
みたいに。
主キーじゃないけど、「部署コード」と「部署名」を毎回セットで書いていたから、くどいし面倒なわけです。
であれば、別で管理して部署名を1か所だけで管理したら、1か所を変更するだけで済みます。
こんな感じで、第三正規化では、主キー以外の、データの繰り返しを整理していきます。
実際に正規化が出題された場合は、「主キーだけ別の箱(テーブル)に出すときは、第二正規化。主キー以外もやるなら、第三正規化」と考えればよしです。
「自分で主キーがどれか?」を判断しないといけないこともありますが、「主キーとなるデータは、他とかぶることは、絶対にありえない」がわかっていれば、解いていけばいけるかと!
第三正規化を読んでわからなくなったら、第一と第二の復習を
第三正規化を読んでわからなくなったら、第一と第二正規化の復習をしてくださいまし(-_-;)。
どこからわからなくなったかを、ハッキリさせて、ゆっくり読み込めばわかるはず。
まとめ
第三正規化ときたら、主キー以外のデータの繰り返しを整理すること。
主キーだけでなく、それ以外の項目(むしろ主キー以外の項目の方が多い)を整理。
「コード値だけのテーブル」と、「コード値から別の情報(社員名とか商品名)がわかるテーブル」の2つだけであるのが理想。
ということで、主キーである/ないにかかわらず、「その項目から別の情報がわかる」項目は、別で管理してあげたほうがいいよね。というのが、第三正規化でした。
業務では、第三正規化までやってあげないと、テーブル(データを入れる箱)の項目数が、かなり多くなる(大人の事情なので、あまり具体的なことは言えない 笑)と思ってくださいまし(-_-;)。
コメント