もどる

第3回 データモデル

1 データモデル

データモデルの必要性と目的:

1.データベースは世の中の事象を表現している。

2.世の中をそのまま計算機の中に入れることはできない。

3.何らかの秩序、ルールに従って、世の中を計算機に入れ込める形で表現する必要がある。

4.この目的を実現するものとして、種々のデータモデルが提案されている。

階層モデル、ネットワークモデル、リレーショナルモデル、オブジェクト指向データモデルなど・・・

 

データモデル → 計算機 = データベースシステム

 

今一番メジャーなのは1970年からE.F.Coddによって提案された、

リレーショナルモデル

これが一番重要だそうです!!!!!!

これでできているのを「リレーショナルデータベース」といふ。

データモデル = データ定義 + データ操作 + 一貫性制約

データモデルを理解すると、データベース設定を上手に行うためのノウハウがわかる。

つまり、データモデルは初心者のデータベースユーザといい設計者の分かれ目なわけですね。

 

2 リレーショナルモデルのデータ定義

データ定義 = データベースの対処世界をどのようなデータの枠組みのもとに表現するか。

          リレーショナルモデルでは、すべてのデータは2次元の表形式であらわす。この表のことを

          「リレーション(relation)」という。

              リレーションの例

社員ID
名前
所属
10332
秋山
営業
25658
佐藤
総務
18705
山本
営業
33521
平野
企画
12345
甘利
企画
25311
東本
企画

 

属性 = リレーションに含まれる各データ項目のこと。

タプル = リレーションに属する個々の値の組は「タプル」と呼ばれる。上の表でいうと10332 秋山 営業 など。

「ドメイン」または「定義域」 = 属性のとりうる値の範囲のこと 性別だったら「男性」「女性」など。

また、決まりがあって、ある行のある列に入れることができるのは、1つ。たとえば、

社員ID
名前
所属
10332
秋山
営業、企画

は、所属のところに2つの値が入っているため、非正規型リレーションと呼ばれ、これを下の正規型リレーションに変えて

社員ID
名前
所属
10332
秋山
営業
10332
秋山
企画

とする。これを正規化という。

 

3 リレーショナルモデルの一貫性制約

一貫性制約 = データモデル一般で言った場合、データベースが正しく世の中を表現するために

           データが満たされるべき性質や表現。リレーショナルモデルに特定して言った場合、

           リレーション内、およびリレーション間で満たされるべき性質や条件。

 

リレーション内の条件:

・主キー(タプルを一意に特定するための属性または属性集合)の値は重複してはならない。

・主キーの値は空ではならない。

ということになると、名前は主キーにはなり得ない(同姓同名)。生年月日も同様。

 

これをレコードの場合と照らし合わせると、

レコード<==============>タプル

レコード集合<==========>リレーション

フィールド<============>属性

キー<================>主キー

フィールド長<==========>なし

 

リレーション間の条件:

1.参照一貫性制約 = 外部キーに現れる値は、関連するリレーションの主キーとして現れる値でなければならない。

外部キーとは、ほかのリレーションにおいては主キーとして用いられている属性のこと。

 

参照一貫性制約が重要となるのは?

1.削除の場合の四つの方法論

(a)参照されているのだから、削除は禁止

(b)主キーを消すと同時にそれを参照している外部キーを含むタプルも削除

(c)削除された主キーを参照していた外部キーにはかわりに値を入れる

(d)削除された主キーを参照していた外部キーには代わりにデフォルト値を入れる。

 

2.更新の場合の四つの方法論

(a)参照されているのだから更新は禁止

(b)主キーを更新すると同時にそれを参照している外部キーも更新

(c)更新された主キーを参照していた外部キーには代わりに空地を入れる

   参照一貫性制約の説明

社員リレーション

社員ID
名前
所属ID
10332
秋山
3
25658
佐藤
1
18705
山本
3
33521
平野
2
12345
甘利
2
25311
東本
2
 

所属リレーション

所属ID
所属名
建物

階数

1
総務課
第二ビル
4
2
企画課
第一ビル
2
3
営業課
第四ビル
5

(d)更新された主キーを参照していた外部キーには代わりにデフォルト値を入れる。

 

4 リレーショナルモデルのデータ操作

4.1 関係代数(リレーショナル代数)

・(1)、(2)共通、(3)、(4)直積、(5)射影、(6)選択、(7)結合、(8)、の八種類の演算が基本。

・(1)-(4)が提案された後(5)-(8)が追加された。

4.2 関係代数(リレーショナル代数)の各演算

授業ではここから演習でした。

図1

R1

品目名 単価
コーヒー 500
紅茶 500
アイスコーヒー 550
ソーダ水 550
カレーライス 900

R2

品目名 単価
カレーライス 900
スパゲティ 950
ピザトースト 800

4.2.1 和

とは、R1とR2に含まれるすべてのタプル。

つまり、R1 ∪ R2

品目名 単価
コーヒー 500
紅茶 500
アイスコーヒー 550
ソーダ水 550
カレーライス 900
スパゲティ 950
ピザトースト 800

となる。

 

4.2.2 共通

共通とは、R1とR2に共通に含まれるすべてのタプル。

つまりR1 ∩ R2

品目名 単価
カレーライス 900

となる。

4.2.3 差

とはR1−R2の場合、R1にのみ含まれ、R2には含まれないタプル。

R2−R1の場合、R2にのみ含まれ、R1には含まれないタプル。

R1−R2

品目名 単価
コーヒー 500
紅茶 500
アイスコーヒー 550
ソーダ水 550

R2−R1

品目名 単価
スパゲティ 950
ピザトースト 800

 

 

図2

R1

社員ID 名前 所属ID
3561 竹内 1
2964 佐藤 2
1109 中山 2

R2

部署ID 部署名 住所
1 企画 青山
2 営業 大森

4.2.4 直積

直積とはR1、R2をすべての組み合わせでつなぐこと。

R1 × R2

社員ID 名前 所属ID 部署ID 部署名 住所
3561 竹内 1 1 企画 青山
3561 竹内 1 2 営業 大森
2964 佐藤 2 1 企画 青山
2964 佐藤 2 2 営業 大森
1109 中山 2 1 企画 青山
1109 中山 2 2 営業 大森

となるが、無駄な部分が多いため結合が使われることが多い。

 

4.2.5 射影

あるリレーションの中から必要な属性のみを取り出す。必要な属性のみに絞りたいときに使われる。

 

4.2.6 選択

図4

注文ID

注文者名 品目名 個数
889 有山由利 トースト 2
986 大木俊之助 コーヒー 3
993 山田明雄 コーヒー 2
1015 峰 智美 紅茶 4
1057 後藤雅彦 コーヒー 4
1088 代田由香里 コーヒー 2
1155 山本百合香 トースト 1

選択とは、あるリレーションの中に対して条件を指定して、条件を満たしているタプルのみ取り出す。

たとえば、図4から、条件を『コーヒーを3個以上注文』にして選択すると、

注文ID 注文者名 品目名 個数
986 大木俊之助 コーヒー 3
1057 後藤雅彦 コーヒー 4

となる。

 

4.2.7 結合

直積において、結びつけた二つの属性間である条件を満たすタプルのみを残したもの。

属性の重複があった場合は取り除き、1つにする。

R1

注文ID

品目ID

個数
586 2 5
259 1 1
332 2 2
456 3 2

R2

品目ID 品目名 単価
3 紅茶 500
2 コーヒー 500
1 ビール 700

これを結合すると、

注文ID

品目ID 個数 品目名 単価
586 2 5 コーヒー 500
259 1 1 ビール 700
332 2 2 コーヒー 500
456 3 2 紅茶 500

 

4.2.8 商

R1÷R2とは、R2のリレーションのすべてのタプルを含むR1のタプルを取り出し、それから、R2を除く。

R1

注文者 品目名 単価
大木 コーヒー 500
大木 トースト 200
大木 紅茶 500
伊藤 コーヒー 500
後藤 コーヒー 500
後藤 トースト 200

R2

品目名 単価
コーヒー 500
トースト 200

R1÷R2は

注文者
大木
後藤