📑

【後編】正規化ってなんだ_非正規形について【ノンビン塾:第7回】

2023/08/10に公開

※「ノンビンとは?」となった方へ


へいしゃのやんちゃボーイです

前回の記事に引き続きです。
https://zenn.dev/collabostyle/articles/a84cb0130dd268

この記事では前回伝えきれなかった
正規化の第1~第3形態についてまとめていきます。

kintoneを使って実践していきながら解説するぜ🌞

はじめに

今回の内容は、以下も参考にして作成しています。
https://oss-db.jp/dojo/dojo_info_04

正規化の種類

  • 非正規形
  • 第一正規形
  • 第二正規形
  • 第三正規形

※これ以外にもある

第一正規形 とは


こういうヤツです

非正規形をデータベースに格納できるよう、各データを独立させた形態です。
でも、このままではまだまだイケてないテーブルです。

例えば、↑の画像で「消しゴム」というデータが重複していますよね🤔
さらに、「鉛筆」「消しゴム」「筆箱」以外に購入したものが増えてきた場合は
それを購入しないとデータとして登録されてきません。

それは困りますよね😎
それを、第二正規形として更に正規化していきます。

第二正規形 とは

非正規形のデータを、第一正規形でデータベースに収められるようにしました。
第一正規形で一意(ユニーク)なデータと判断するには、なんの項目を見るべきでしょうか?

細かくデータを分析してみましょう。

わたしが今 例 としてカキカキしているデータベースは、
「株式会社コラボスタイル」のななさんが
「文房具」をいくつ「いつ」買ったのかを、格納していますよね。

上記でいけば、以下のように分割することができます。

  • 文房具の商品情報を格納するテーブル
  • 文房具の購入情報を格納するテーブル


文房具リスト


購入リスト

こうなります。
ユニークなデータと判断するには、さっき角括弧「」で示した
データがダイジになってきます。

  • 取引先名
  • 商品名
  • 購入日

第三正規形 とは

では、これで正規化は完璧でしょうか?
ええそうです、そうやって聞くということは実はまだ未完成なのです👩‍🦳

取引先の担当者が変化した場合は?
現状だと、1つの1つのレコードを修正していくほかありません。

あ、いざという時のために電話番号も保管しておきたいなぁ。
現状だと、1つの1つのレコードを修正していくほかry

主となる値以外に紐づくものも、別テーブルとする必要性が出てきました。
ここで登場するのが第三正規形です。


取引先リスト


担当者リスト

これで取引先が変更になっても、担当者が変わっても、
緊急時に電話をかけたくなってもおkな状況ができました。


改めて、購入リストを見てみましょう

赤枠で示されている部分が、実際には別テーブルからデータを持ってきたものです。
※レコードで値をベタ書きしていない状態

「購入リスト」という名にふさわしく(?)
純粋に「購入日」と「購入した数量」を手入力しているのみです。

ここまでデータが細かく分けられていると、
今度は逆引きも容易になります。

逆引きとは、
例えばGoogleで自分の名前を調べてみたとき。

色んな同名さんが出てきますが、
その中にコラボスタイルの石川ナナさんが出てきたりします。

これが逆引きです。
「いしかわなな」というワードから「コラボスタイル」という単語をひけてます。

こうしたように、関連するデータ(レコード)を作れるのは
主キーがあるからだったりします。

主キーまじだいじ、データ設計まじだいじ ですネ!

おわり

今回のノンビン塾は「データベースについて」「正規化について」でした。
いかがだったでしょうか?

わたしは当日フンフンと聞きながらメモも取っていたのに、
実際に書き起こしてみるとけっこう難しくて
色んなサイトを見ながら復習をしていました🐸

特に、主となるデータ、そうでないデータの切り分けが難しかったです。
ノンビンがよくいってますが、「難しいなぁ」と感じたときこそ
シンプルに考えてみることが大切です。

シンプルに考える とは、 カッコイイことをしない こと。(だと思う)

今回でいうと、いきなり「綺麗にデータベースをつくろう」と
むりに正規化から始めるのではなく。

泥臭くても、遠回りでもいいから、必要なデータを洗い出したり
非正規形で組んでみること。

必要・不要を考えるのは情報が揃ってからでも問題ないと感じます。
いきなり頭の中でやれたら、そりゃかっちょいいですが👍

背伸びせずにまずは手を動かしてみたいですね😎

コラボスタイル Developers

Discussion