第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は
注文者 |
大木 |
後藤 |