データの正規化

システムデータベース,オブジェクト

正規化とは?

正規化の意味

正規化(せいきか、英語: normalization)とは、データ等々を一定のルール(規則)に基づいて変形し、利用しやすくすること。別の言い方をするならば、正規形でないものを正規形(比較・演算などの操作のために望ましい性質を持った一定の形)に変形することをいう。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

データの正規化は、データの重複が無いように適切に分割することを指します。
また、正規化されていない状態のことを非正規形と言います。

なぜ正規化が必要なのか?

データの正規化をしていない場合、1レコード(行)で管理している情報が独立していないため、データの一部を更新する場合、全ての情報を更新しないといけない。また、作業ミスなどによるデータ不整合や喪失してしまう可能性も高いため、メンテナンスがしやすくなります。

正規化の方法

Excelなどの表計算ソフトでデータを管理する場合、下記の[注文情報]のように、必要に応じてセルを結合することでメンテナンスを簡単にしていることが多いと思います。

これは、1つの注文に対して、複数のデータ(商品など)が重複しているので非正規形です。

では、これから正規化していきましょう。

繰り返しの排除(第1正規形)

まず最初に行うのは、繰り返し項目の排除です。
注文情報で結合したセルを分解し、1行でデータが完結するようにします。

部分関数従属性を分割する(第2正規化)

次に部分関数従属を分割して、別テーブルにします。
部分関数従属ってなに?ってなると思いますが、要はキー項目(複数)が決まれば一意」になる項目を抜き出します。
今回は、注文Noと商品IDで一意になるので、それらを「注文情報」「注文明細情報」に分けます。

推移的関数従属を分割する(第3正規化)

最後に推移的関数従属を分割して、別テーブルにします。
こちらも同じく推移的関数従属ってなにって感じですが、キー項目よって一意になる項目を抜き出します。
注文情報にある顧客IDが決まれば顧客名などが一意になるので、「顧客情報」を抜き出します。
同じように、注文明細情報にある商品IDも一意になるので、「商品情報」を抜き出します。

完成形がこちら

実際にやってみよう!

例題1:勤怠データ

ある企業の勤怠データの一部です。
こちらのデータを正規化してください。

例題2:人事評価

ある企業では、人事評価をするにあたって、個人で決めた目標に対する達成度を基準に評価をしています。
人事評価に必要なテーブルを作成してみてください。

【参考情報】
人事評価のステップはこちらです。
 1.個人目標設定(3項目)
 2.上長承認
 3.個人評価(各項目別判定)
 4.上長評価
 5.評価結果(総合判定)

データベース設計に近い部分にもなりますが、これが分かるとかなり幅が広がります!