Skip to content

Instantly share code, notes, and snippets.

@eiichi-worker
Last active April 8, 2020 08:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eiichi-worker/3d4295e24bf36ce6bae37e89b436589c to your computer and use it in GitHub Desktop.
Save eiichi-worker/3d4295e24bf36ce6bae37e89b436589c to your computer and use it in GitHub Desktop.
データベースの正規化

データベースの正規化

正規化の種類

  • 非正規形
  • 第1~第5正規形
  • ボイスコッド正規形

用語

スカラ値

一つの値を持っているもの、配列とかはスカラ値じゃない

主キー

候補キーのうちのどれか一つの主たるものを主キー

  • 一意性制約
  • 非ナル制約

候補キー

特定の行を識別できる項目

  • 一意性制約

非キー属性

主キー以外の項目

関数従属

とある項目が決まれば、残りも決まる的な
X = A,B,C

部分関数従属

主キーの一部に従属する

推移的関数従属

主キー外の項目で依存関係を持っている

決定項、従属項

X → Y のとき、X を決定項、Y を従属項

無損失

非正規形

  • 要は正規化してない状態(データベースに入れれない)
  • 繰り返しがある

第1正規形

関係がスカラ値のみを持ちうるとき、その関係を第1正規形であるという。
要するに、繰り返項目を別テーブルに分ける。

  • 各テーブルで繰り返し現れるグループを除去します。
  • 行を特定する主キーを決めます
  • 必要であればテーブルを分ける

第2正規形

ある関係が、第1正規形で、かつ、すべての非キー属性が、すべての候補キーに対して完全従属するとき、第2正規形であるという。
要するに、部分的関数従属を別テーブルに分ける。

  • 完全従属 ということは 部分的関数従属をなくしましょう  - 主キーとデータっぽい塊を作れそうなやつは別テーブルに分割しましょう

第3正規形

第2正規形で、かつ、非キー属性があるならば、それら全てが候補キーに非推移的に関数従属するとき、第3正規形であるという。
要するに推移的関数従属を別テーブルに分ける。

ボイス・コッド正規形

ある関係上に存在する自明でない全ての関数従属性の決定項が候補キーであるとき、かつそのときに限り、その関係はボイス・コッド正規形であるという。
要するに、主キー以外に関数従属性があってはダメ。

  • 主キーからの完全関数従属関係以外の関数従属関係を別テーブルに分ける。
  • 候補キーを構成する属性の間に候補キーを決定項としない関数従属性が存在することを許さない。
  • すべての列が主キーに完全関数従属で、他に完全関数従属関係がないものを言います。
  • 全てにおいて 主キー(決定項) → 非キー項目 である

正規化例題

参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment