データベーススペシャリスト(関数従属性と多値従属性および正規化)

今日は幸い第3章と第4章進捗です。
一応、何となくは理解できるけど人に説明しろと言われると
説明できないという概念です・・・。言葉が難しいね。

1:関数従属性
関係の中でXの値が決まるとYの値が一意に決まると
関数従属性が存在する。という以下の事例。
A→B:Aが決まればBの値が決まる。
{A,B}→C:AとBが決まればCが決まる。
C→{A,B}:Cが決まればAとBが決まる。
 
・完全関数従属性:
どんな組み合あわせだろうが必ず値が一意になる。
X={A1,A2,A3}のときX→Yならば完全関数従属(以下のケースが成立)
{A1,A2}→Y、{A1,A3}→Y、{A2,A3}→Y、{A1}→Y
{A2}→Y、{A3}→Y


・部分関数従属性
複数の候補キーもしくはいずれかのキーで値を特定できる。

   {A,B}→Cであり、A→CまたはB→Cである場合、Cは{A,B}に部分関数従属する。
・推移的関数従属性
ある値が決まると別の値が決まって最終的な値を特定できる。
   A→B→Cのとき、CはAに推移的関数従属する。
  ・自明な関数従属性
YがXの部分集合であるとき、X →Yが必ず成立する

・関数従属性の公理(アームストロングの公理系
反射率:Y⊆X⇒X→Y
添加率:X→Y⇒X∪Z→Y∪Z  推移率:X→Y∧Y→Z⇒X→Z

ごめんなさいさっぱり分かりません。なぜにこんな難しい言い回しなんだ(泣)
さっぱりやけどどうやらひとつのキーが導き出せれば最終的に目的とする値を
取り出すことが出来るということらしい。で乱暴にまとめよう。



2:多値従属性
教科書読んでもさっぱり意味不明なことが書いてあります。
先人が調べてくれてます。ココの説明がしっくり来るとのことですが・・・
Aが決まればCがなんだろうがBが決まるってどういうこと?
余計にパニックです。まあ正規化が本チャンなんでここはこれで流そう。

3:正規化
ついに来ました正規化、1つの事実を1箇所に(one fact in one place)です。
   DBスペシャリストの天王山とも言えるところですね。
もうひとつは関係データモデルで扱える形にするという意味が込められています。

4:第1正規形
乱暴に言うと繰り返し属性を排除してすべてを行にしてしまいRDBに
格納できるようにした。
難しく言うと「リレーションが単純な定義域で定義されている」だそうです。


5:第2正規形
ひとつのキーでひとつのレコードを特定できる。 教科書風に言うと
「リレーションが第1正規形ですべての非キー属性が候補キーに対して完全関数従属している」


6:第3正規形
これ口で説明できない・・・。ひとつのレコードを特定した後にさらに別のキーで分割できる
項目があるというところか・・・教科書では、
「リレーションが第2正規形でかつすべての非キー属性がどの候補キーに対しても推移的に関数従属でない。」
実務では第3正規形までで良いケースが多いとのことですが、私が実務で接したDBは第2正規形が多かったです。その甲斐あって更新時異常のデータメンテが多数発生してましたが・・・。

7:ボイスコッド正規形
使ったことないんで分かりませんが、色々解説見てるともとのリレーションを表現できないという恐ろしい代物のようです。
「X→Yをリレーションの関数従属性とするときX→Yは自明な関数従属性であるか、またはXはリレーションのスーパーキー


8:第4正規形・第5正規形
多値従属性が存在しない形式にする=第4正規形
1つのキーで1項目を特定する=第5正規形
※ボイスコット正規形以降の正規形だとビジネスルールを正しく
RDBに保持できないので実務上使用されていない。

9:更新時異常
・タプル挿入時異常
主キー制約に違反=>高次の正規化で挿入できるようになる。
・タプル削除時異常
事実が削除されてしまう。=>高次の正規化で情報を残すことができる。
・タプル更新時異常
複数のレコードが更新されてしまう。=>高次の正規化で更新レコードを限定できる。


◆正規化メモ
http://www.rfs.jp/sb/sql/01/05.html
http://www.annyys.net/html/kihon_002.htm
http://sql.main.jp/cont/norm/map.html

ほんま言葉の概念をきちんと理解出来ていないと人にうまく説明できないということやねー。ちなみに何となく身体で正規化を覚えていたりします。なんで関数従属性とかそのへんの言葉より、いきなりテーブル見せられて正規化しろの方がピンと来たりするんやね。

で論理設計なら正規化でパフォーマンスの考慮をあまりしなくていいけど、更新とか
検索で第3正規形にテーブルを分割してたりするとJoin処理とか複数テーブルにロック
かけたりすることからパフォーマンスが悪くなったりすることもあるそうです。
なので最近KVSとかNoSQLとかがやたら注目を浴びていたりします。
これは第2正規形って考えたらいいのかな(苦笑)。

ということで本日は終了。そろそろ寝ます。
んで次はSQLです。

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)