達人に学ぶDB設計を読んだときのメモ。

第1正規形 スカラ値(Scalar value)

「1つのセルの中には1つの値しか含まない」

関数従属性(functional dependency)

Y = f(X) : 入力Xに対して出力Yを決めるための式

このとき、YはXに従属するという。

この関係をデータベースで表すと、{X} -> {Y}となる。

Xの値を決めれば、Yの値が1つに決まる。 (XおよびYは1つの列ではなく、複数の列の組み合わせであっても構わない)

i.e. 正規化とは、テーブルのすべての列が関数従属性を満たすように整理していくこと。

第2正規形

会社コード, 会社名, 社員ID, 社員名, 年数, 部署コード, 部署名

{会社コード} -> {会社名}

主キーの一部である「会社コード」に従属している。 主キーの一部の列に対して従属する列がある場合、この関係を部分関数従属と呼ぶ。

正規化のポイント

  • 正規化とは、更新時の不都合・不整合を排除するために行う
  • 正規化は、従属性を見抜くことで可能となる

テーブルの形式だけ見ててもわからない。どの列がどのキーに従属しているかは、業務ロジック(ビジネスロジック)で決まる。

部分関数従属 推移的関数従属

参考