てぃぐれのプログラマwiki

ワクワクに従う

データベースの正規形を片隅に

データベースの正規形

普段の業務では、正規形など意識しなくても、正規化してるので、第一とか言われても。。

しかし、DWHの世界では第二正規形で留めるということがあるので、改めて正規形を言語化しておきたい。

 

第一形態(正規形)

同一の項目(カラム)の削除

 

第二形態

主キーでわかる項目(部分関数従属)は主キーを残して、他のテーブルに切り出しましょう。

 

第三形態

主キー以外のキーで分かる項目はキーを残して、他のテーブルに切り出しましょう。

 

第二と第三の違い、、あるか?

と最初に思った。第二で正規化する項目は主キーつまりその項目があればどのレコードか絶対に特定できるよねという項目。

第三はその項目を見てもレコードの断定はできないよねという項目。

 

基本は正規化、でも業務内容を見据えて

基本的に正規化していくのは当然。

だが、注文詳細など履歴として残したいものは、別のテーブル影響を受けさせたくない場合がある。

 

例えば、商品テーブルに商品ID・商品名・価格を持っていたとしよう。

注文履歴には商品IDがあり、個数があり、商品テーブルの価格x個数で金額が出ている。

 

ある日、商品価格改定をすると、注文履歴の過去の価格まで変わってしまう。

影響を受けてはいけない項目をあるよということは片隅において欲しい。