SE基本情報に出るIT用語

第三正規化とは?主キー以外のデータの繰り返しを整理する

第三正規化って何?

データベースを勉強しているうちに、混乱してきた・・・。

という人向けの記事です。

第三正規化とは、主キー以外のデータの繰り返しを整理することです。

第一正規化では、はみ出ているデータを整理。すべてのデータが同じ形となるように整理しました。

第二正規化は、正規化の第二段階。

主キーにまつわる項目で、ダブってたり、回りくどい部分をなくすのが目的です。

そして今回の第三正規化は、正規化の最終段階で、「主キー以外のデータの繰り返しを整理すること」です。

第三正規化とは

実際のお仕事では、主キー以外の項目の方が圧倒的に多いので。

最後まで、しっかりと整理してあげたほうが見やすくなります!

第二正規化を理解している人からすれば、「第二正規化でやったことを主キー以外の項目でもやるのが第三正規化」と解釈した方がわかりやすいかもです。

スポンサーリンク

第二正規化までのおさらい

正規化のそもそもの考えと、第二正規化までのおさらいを軽くします。

(くどいかもだけど、今からのお話がわかってれば、第三正規化は楽勝なので。)

正規化とは?

その前に、正規化について、まだイマイチという人は、ざっと読んでくださいまし。

第一正規化の記事でも解説しているので、飛ばしてもらって大丈夫です。

正規化についてざっくりと言ってしまえば、「余分だったり、ダブってたり、回りくどい部分をなくすこと」です。

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

主キーとは?

それと、主キーって何?

主キーは、「他と、かぶることのないデータ」です。

例えば、社員番号とか、学生番号が身近でわかりやすいです。

社員が何人になろうが、学生が入学しようが、「番号」が他の人とかぶることは、あり得ません。

主キーはかぶることがない

例えば、ある会社の社員番号で、「1000001」という番号があったとして。

「1000001」という番号は誰のことを言っているのか?

番号から、社員の名前が、わかるようになっています。

もし、「1000001」が、AくんとBさんの2人を指していて。

仲良く(?)番号を共有していて、AくんとBさんを区別できないとしたら。

「社員番号の意味ねぇじゃん」となりますよね(´▽`*)。

なので、主キーとなるデータは、他とかぶることは、絶対にありえません。

第二正規化では、主キーにくっつく、データの繰り返しを整理した

第二正規化のおさらいになりますが、他とかぶることのない、主キーにくっつく、データの繰り返しを整理します。

すでに、第二正規化の記事で説明しているので、説明は、かんたんにします。

第二正規化とは?主キーにくっつく、データの繰り返しを整理する

主キーの社員番号にひもづく、Aさん・Bさん・Cさんの名前を、データベースの別の箱で管理。

別の箱で管理してる社員名だけを変更すれば、「1000001からとれてくる社員名はAさん」となるわけです。

同じことを、担当商品コードでもやってあげて、完成形がこんな感じに。

第二正規化の完成
スポンサーリンク

第三正規化とは、主キー以外のデータも整理する

  • 「社員番号」(主キーで絶対にかぶらない)
  • 「部署コード」
  • 「部署名」(部署コードから必ずわかるもの)
  • 「担当商品コード」(主キーで絶対にかぶらない)

というデータベースのテーブル(箱)があるとき。

社員番号と担当商品コードは、第二正規化で整理しました。

第二正規化の完成

あと正規化していないのが、部署コード。

部署コードから部署名がわかるので、主キーではないけれども、整理することができます。これが第三正規化。

部署名が変わったときに変更するのが大変

たとえば、データベースに登録している部署名を、「第一営業部から、関東第一営業部に変更したい!」となったとします。

部署名の「第一営業部」の部分は、すべて「関東第一営業部」に変えないといけないですよね。

今の例だと「第一営業部」が2つしかないけど、もし100万件とか、めっちゃ多くのデータがあったら。

全部を「第一営業部」から「関東第一営業部」に変えるのは、大変だしミスります。

あるいは、

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

営業部だけじゃなくて、マーケティング部もだ!

みたいに、いろんな部署の名称も変えないといけなかったりしたら、しらみつぶしに変えていくのは骨が折れます。

しらみつぶしに変更するのは大変だから社員名は別の箱で管理

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

部署名を管理する箱を作ってしまえばいい!

さて、第二正規化がわかっている人からしたら、「なんだ、第三正規化、余裕じゃん」となるかと。

第三正規化とは

第三正規化をする前は、いちいち、

「801,第一営業部|801,第一営業部|802,第二営業部|803,第三営業部|803,第三営業部」

みたいに。

主キーじゃないけど、「部署コード」と「部署名」を毎回セットで書いていたから、くどいし面倒なわけです。

であれば、別で管理して部署名を1か所だけで管理したら、1か所を変更するだけで済みます。

こんな感じで、第三正規化では、主キー以外の、データの繰り返しを整理していきます。

実際に正規化が出題された場合は、「主キーだけ別の箱(テーブル)に出すときは、第二正規化。主キー以外もやるなら、第三正規化」と考えればよしです。

「自分で主キーがどれか?」を判断しないといけないこともありますが、「主キーとなるデータは、他とかぶることは、絶対にありえない」がわかっていれば、解いていけばいけるかと!

第三正規化を読んでわからなくなったら、第一と第二の復習を

第三正規化を読んでわからなくなったら、第一と第二正規化の復習をしてくださいまし(-_-;)。

  1. 第一正規化:同じ形に整えること
  2. 第二正規化:社員番号と社員名のような主キー関連のデータを整理

どこからわからなくなったかを、ハッキリさせて、ゆっくり読み込めばわかるはず。

まとめ

第三正規化ときたら、主キー以外のデータの繰り返しを整理すること

主キーだけでなく、それ以外の項目(むしろ主キー以外の項目の方が多い)を整理。

「コード値だけのテーブル」と、「コード値から別の情報(社員名とか商品名)がわかるテーブル」の2つだけであるのが理想。

ということで、主キーである/ないにかかわらず、「その項目から別の情報がわかる」項目は、別で管理してあげたほうがいいよね。というのが、第三正規化でした。

業務では、第三正規化までやってあげないと、テーブル(データを入れる箱)の項目数が、かなり多くなる(大人の事情なので、あまり具体的なことは言えない 笑)と思ってくださいまし(-_-;)。

▼この記事がいいと思ったら、下の画像をクリックしてくれたら励みになります!

にほんブログ村 IT技術ブログ システムエンジニアへ
スポンサーリンク
ひよこSEのつぶやきブログ

コメント

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