【DB】実務においては第1正規形まででとどめた方が良いのではないか?
おはようございます。タカヒデです。
私は非エンジニアです。
業務においてデータを扱う機会が多いことから、データベース設計について学んでみることにしました。
すると「正規形」という言葉に出会います。
そこでは「データは第3正規形で管理しよう」と書いてあるではないですか。
はたしてそれはすべての場合において正しいのでしょうか?
というのも私の業務において第3正規形を試したところイマイチ使いづらいと感じています…
「本当に第3正規形まで作る必要があるのだろうか?」「第1正規形で十分ではないか?」
そんな私の思いを言語化し、「実務においてどこまで正規化すべきかを検討」していくのが今回の記事です。
- データの正規化を実務に落とし込みしたい
- データを扱う業務を担っている
私の主観も混ざった記事です。
誤った内容があったり、「もっとこうした方が良い」というコメントがあればご意見ください。
【意見提起】実務では第3正規形しない方が良いのでは?
冒頭でもお伝えしましたが、今回の記事は「実務において第3正規形にしなくてよいのではないか?」という意見提起です。
第3正規形と言っていますが、何なら第2正規形も不要です。
「第1正規形のみ守ればそれで良い」とすら思っています。
なぜそのような意見に至ったか。
それは、「一つのExcelシートで伝えたいことが伝わらない」ためです。
それだけ言っても分かりづらいと思うので、私が実際に業務でどのような使い方をしているか見ていきましょう。
私があえて第3正規形しない理由
私のデータの使い方は主に「施策費用のデータ管理」です。
一部内容は変更していますがざっくり以下のようなデータを扱っています。
【第1正規形の状態】

担当別の施策費用を管理するデータです。
結果的に第2正規形も満たされていますが、第1正規形が満たされているデータです。
これを第3正規形にし、担当データを別のテーブルで管理してみます。
【第3正規形の状態】

シンプルで担当名の変更があったりしても対応が簡単そうですね。
これで第3正規形になりました。
しかし私はSQLなどは使用しておらず、ただExcelのシートを見せて上司に説明をします。

つまりはこんな状態。
これでは「S006の施策IDで5,000万円使っているのがどこの担当か」が一目で分かりません。
毎回、「T003は総務担当です」といった口頭説明が必要になってしまうのです。
これでは必要な議論に至る前に不要な説明をしなければなりません。
これが私が第3正規形にしない理由です。
正規化しないことのデメリットとは?
もちろん正規化することを否定するわけではありません。
正規化することにより、データの冗長性が無くなり、更新に強いデータができることは事実です。
しかし、「達人に学ぶDB設計徹底指南書」では以下のデメリットがあることも記載されています。
欠点■ テーブルの数が増えるため、SQL文で結合を多用することになり、パフォーマンスが悪化する。
つまり、正規化をすればするほど、「データの整合性が高まる一方、検索パフォーマンスは低下してしまう」のです。
私はSQLを活用せず、Excelで管理しているのみですが、チームメンバー全員がこの費用データを利用します。
「誰でも使えるようにする」という観点では、あえて正規化しないということも一つの選択肢になるのではないでしょうか。
【結論】まずは正規化して不便だったら止めれば良い
ということで、私が導き出した結論がこちら。
「まずは第3正規形まで正規化させることを前提とし、自身の利用用途に合わせて非正規化させる」
いかがでしょうか?
この記事を書きながら、「本当にこのやり方が正解なんだっけ?」と自問自答しながら出した結論です。
確かに、社内でも正規化されたデータが使われているシーンは数多くあります。
ただ、一通り正しい方法を試したうえで、自身の業務がそれでは上手くいかないのであれば別の方法を取る、ということは悪くないと思っています。
もちろん、「こんな管理の仕方が良いよ」とかがあれば是非ご意見をいただけると幸いです。
お疲れさまでした。
