「テーブルとは」の編集履歴(バックアップ)一覧はこちら
「テーブルとは」(2008/03/18 (火) 04:23:03) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
**テーブルの分類
|CENTER:名称|CENTER:別名|CENTER:判断基準|CENTER:定義内容|
|リソース系|マスタ(系)|「~名」といえるか|ビジネスを行う上で必要な資産データを保持するテーブル。台帳的ともいえる。|
|イベント系|トランザクション(系)|「~する」といえるか&br()「~日」といえるか|行為の記録データを保持するテーブル。|
**正規化
まずは、各正規化の説明
:非正規形|全く正規化が行われていない状態のテーブル。
:第1正規形|非正規形のテーブルに対して以下のことを行ったもの。&br()1.テーブルに主キーを設定&br()2.繰り返し現れる列を別のテーブルに分離&br()3.導出列(他の列同士の演算によって算出できるなど)を削除
:第2正規形|複合主キーを構成する1つの列のみの値によって、決まる列は、別テーブルに分割する。&br()※難しくいうと、第1正規形から部分関数従属性を取り除くこと。
:第3正規形|主キーとなる列以外の値によって、他の非主キー列の値が決まることがないようにテーブルを分割した状態のこと。&br()※難しくいうと、第2正規形から推移関数従属性を取り除くこと。
:関数従属性|ある属性Aの値が決まるとき、属性Bが一意に決まることをいう。「A→B」と表記。
:移関数従属性|ある属性Aが決まると属性Bが決まり、その結果属性Cが決まるという関係。「A→B→C」と表記。(ただしB→Aは不成立)
***正規化の例1
****非正規形のテーブル
表の1レコードが、「受注番号」を主キーとして、こんなふうにレイアウトされているとする。
|受注番号|得意先番号|得意先名|担当営業番号|担当営業名|商品番号1|商品名1|単価1|数量1|金額1|商品番号2|商品名2|単価2|数量2|金額2|
1レコード中に「商品明細」が繰り返し存在する。(明細「商品番号・商品名・単価・数量・金額」が、一つのレコードの中に繰り返し存在している。)
このような繰り返し項目は、別のテーブルに分離するとともに導出項目を削除。
****第1正規形のテーブル
|&u(){受注番号}|得意先番号|得意先名|担当営業番号|担当営業名|
分割した結果、つぎのテーブルの主キーは、[受注番号,商品番号]の複合主キーとなる。
|&u(){受注番号}|&u(){商品番号}|商品名|単価|数量|
このうち、商品名と単価は、複合主キーの商品番号によってのみ決定される([商品番号]→[商品名]、[商品番号]→[単価])ので、別テーブルとする。
****第2正規形のテーブル
|&u(){受注番号}|得意先番号|得意先名|担当営業番号|担当営業名|
[得意先番号]→[得意先名]、 [担当営業番号]→[担当営業名]なので、別テーブルとする
|&u(){受注番号}|&u(){商品番号}|数量|
|&u(){商品番号}|商品名|単価|
****第3正規形のテーブル
第3正規形にすると以下のようになる。
|&u(){受注番号}|得意先番号|担当営業番号|
|&u(){得意先番号}|得意先名|
|&u(){担当営業番号}|担当営業名|
|&u(){受注番号}|&u(){商品番号}|数量|
|&u(){商品番号}|商品名|単価|
&br()
&br()
**テーブルの分類
|CENTER:名称|CENTER:別名|CENTER:判断基準|CENTER:定義内容|
|リソース系|マスタ(系)|「~名」といえるか|ビジネスを行う上で必要な資産データを保持するテーブル。台帳的ともいえる。|
|イベント系|トランザクション(系)|「~する」といえるか&br()「~日」といえるか|行為の記録データを保持するテーブル。|
**正規化
まずは、各正規化の説明
:非正規形|全く正規化が行われていない状態のテーブル。
:第1正規形|非正規形のテーブルに対して以下のことを行ったもの。&br()1.テーブルに主キーを設定&br()2.繰り返し現れる列を別のテーブルに分離&br()3.導出列(他の列同士の演算によって算出できるなど)を削除
:第2正規形|複合主キーを構成する1つの列のみの値によって、決まる列は、別テーブルに分割する。&br()※難しくいうと、第1正規形から部分関数従属性を取り除くこと。
:第3正規形|主キーとなる列以外の値によって、他の非主キー列の値が決まることがないようにテーブルを分割した状態のこと。&br()※難しくいうと、第2正規形から推移関数従属性を取り除くこと。
:関数従属性|ある属性Aの値が決まるとき、属性Bが一意に決まることをいう。「A→B」と表記。
:移関数従属性|ある属性Aが決まると属性Bが決まり、その結果属性Cが決まるという関係。「A→B→C」と表記。(ただしB→Aは不成立)
***正規化の例1
****非正規形のテーブル
表の1レコードが、「受注番号」を主キーとして、こんなふうにレイアウトされているとする。
|受注番号|得意先番号|得意先名|担当営業番号|担当営業名|商品番号1|商品名1|単価1|数量1|金額1|商品番号2|商品名2|単価2|数量2|金額2|
1レコード中に「商品明細」が繰り返し存在する。(明細「商品番号・商品名・単価・数量・金額」が、一つのレコードの中に繰り返し存在している。)
このような繰り返し項目は、別のテーブルに分離するとともに導出項目を削除。
****第1正規形のテーブル
|&u(){受注番号}|得意先番号|得意先名|担当営業番号|担当営業名|
分割した結果、つぎのテーブルの主キーは、[受注番号,商品番号]の複合主キーとなる。
|&u(){受注番号}|&u(){商品番号}|商品名|単価|数量|
このうち、商品名と単価は、複合主キーの商品番号によってのみ決定される([商品番号]→[商品名]、[商品番号]→[単価])ので、別テーブルとする。
****第2正規形のテーブル
|&u(){受注番号}|得意先番号|得意先名|担当営業番号|担当営業名|
[得意先番号]→[得意先名]、 [担当営業番号]→[担当営業名]なので、別テーブルとする
|&u(){受注番号}|&u(){商品番号}|数量|
|&u(){商品番号}|商品名|単価|
****第3正規形のテーブル
第3正規形にすると以下のようになる。
|&u(){受注番号}|得意先番号|担当営業番号|
|&u(){得意先番号}|得意先名|
|&u(){担当営業番号}|担当営業名|
|&u(){受注番号}|&u(){商品番号}|数量|
|&u(){商品番号}|商品名|単価|
***正規化の例2(データ付かつ少し変かも)
****非正規形のテーブル
|生徒|中学|教室|科目|先生|
|太郎|東中|東教室|国語,社会,数学|近藤先生(国語),桐山先生(社会),後藤先生(数学)|
|花子|西中|西教室|英語,社会,数学|立川先生(英語),桐山先生(社会),太田先生(数学)|
|一郎|東中|東教室|数学|後藤先生(数学)|
生徒名は、一意である前提とすると、生徒名がキー項目となる。
また繰り返しを排除することで次の形になる。
****第1正規形のテーブル
この結果、主キーは[生徒,科目]の複合主キーとなる。
|&u(){生徒}|中学|教室|&u(){科目}|先生|
|太郎|東中|東教室|国語|近藤先生|
|太郎|東中|東教室|社会|桐山先生|
|太郎|東中|東教室|数学|後藤先生|
|花子|西中|西教室|英語|立川先生|
|花子|西中|西教室|社会|桐山先生|
|花子|西中|西教室|数学|後藤先生|
|一郎|東中|東教室|数学|後藤先生|
このうち、中学は、複合主キーの生徒によってのみ決定される([生徒]→[中学])ので、別テーブルとする。
このときに教室もあわせて移動させないと後でおかしくなるが、それを説明するのが難しい
****第2正規形のテーブル
|&u(){生徒}|&u(){科目}|先生|
|太郎|国語|近藤先生|
|太郎|社会|桐山先生|
|太郎|数学|後藤先生|
|花子|英語|立川先生|
|花子|社会|桐山先生|
|花子|数学|後藤先生|
|一郎|数学|後藤先生|
|&u(){生徒}|中学|教室|
|太郎|東中|東教室|
|太郎|東中|東教室|
|太郎|東中|東教室|
|花子|西中|西教室|
|花子|西中|西教室|
|花子|西中|西教室|
|一郎|東中|東教室|
この状態だと、中学により教室は決定される([中学]→[教室])ので、別テーブルとする。
****第3正規形のテーブル
|&u(){生徒}|&u(){科目}|先生|
|太郎|国語|近藤先生|
|太郎|社会|桐山先生|
|太郎|数学|後藤先生|
|花子|英語|立川先生|
|花子|社会|桐山先生|
|花子|数学|後藤先生|
|一郎|数学|後藤先生|
|&u(){生徒}|中学|
|太郎|東中|
|花子|西中|
|一郎|東中|
|&u(){中学}|教室|
|東中|東教室|
|西中|西教室|
&br()
&br()