More Related Content More from Mikiya Okuno (16) Rdbms qpstudy-okuno8. リレーションの構成部品
● 見出し(ヘッダ)+本体(ボディ)
● 見出し(ヘッダ、 headding )
– 属性の集合
– 集合なので順序はない
● 本体(ボディ)
– ヘッダと同じ属性を持つ組(タプル)の集合
● 属性(アトリビュート)
– 名前と型(タイプ)
● 属性値
– 属性で定義された型を持つ値
– ≒ 列(カラム)
● 組(タプル)
– ヘッダで定義された属性に対応した属性値の集合
– ≒ 行
9. リレーションのイメージ
見出し
国名 / 文字列 国番号 / 整数
本体
地域 / 文字列
国名:日本 ,
国番号: 81,
地域:アジア
国番号: 86,
国名:中華人民共和国 ,
地域:アジア
国番号: 61,
国名:オーストラリア ,
地域:オセアニア
国名:米国 ,
国番号: 1,
地域:北米
地域:アフリカ ,
国名:カメルーン ,
国番号: 237
地域:欧州 ,
国名:スウェーデン ,
国番号: 46
21. リレーションのイメージ(再掲)
見出し
国名 / 文字列 国番号 / 整数
本体
地域 / 文字列
国名:日本 ,
国番号: 81,
地域:アジア
国番号: 86,
国名:中華人民共和国 ,
地域:アジア
国番号: 61,
国名:オーストラリア ,
地域:オセアニア
国名:米国 ,
国番号: 1,
地域:北米
地域:アフリカ ,
国名:カメルーン ,
国番号: 237
地域:欧州 ,
国名:スウェーデン ,
国番号: 46
29. 拡張
国名 / 文字列 人口 / 整数
面積 /
Decimal (km2
)
人口密度 /
Decimal ( 人 /km2
)
40. 豆知識
● 直積( Product )と積( Intersect )はいずれも結合
( Join) の特殊なケース
– 直積・・・共通する属性がひとつも存在しないケース
– 積・・・すべての属性がまったく同じケース
48. 関係変数( Relvar )
● リレーションは「値」
● 値と変数
– C 言語の場合
– int a = 1;
● 変数 a に代入される値は変更できるが 1 という値その
ものは不変
● 関係変数
– リレーションを格納するための変数
– 変数は刻々と変化する
53. ミッション: ”データの 論理的”整合性を保つ
論理的な不整合とは?
name fighting_style age
範馬刃牙 総合格闘技 19
範馬勇次郎 総合格闘技 38
愚地独歩 空手 57
ビスケットオリバ 怪力 40
ビスケットオリバ 柔道 42
花山薫 素手喧嘩 20
烈海王 中国拳法 30
烈海王 ボクシング 30
どっちが
正しい?
重複があると矛盾が起きる!!
(原因になる)
54. 用語 1
● 命題
– ある物事について記述した文章で、その意味が正しいかどうか、つ
まり真なのか偽なのかを問えるもののこと
– 例)ポチは犬である
● 述語
– 命題の中の固有名詞をパラメータ化したもの
– 例) x は犬である
● 命題関数
– 述語から意味を取り除いて関数化したもの。値を代入した場
合の評価結果は述語と同じ。
– 例) F(x)
● 閉世界仮説
– リレーションは事実の集合
● 事実=真となる命題
– →リレーションに含まれる組の属性値の組み合わせ 真
– →それ以外の属性値の組み合わせ すべて偽
61. 用語 2
● 候補キーとスーパーキー
– あるリレーションにおいて、タプルの値を一意に決めるこ
とができる属性の集合で、規約のもの(それ以上減らすこ
とができないもの)を候補キーという
– 候補キーのスーパーセット、つまり余分な属性を含んだも
のをスーパーキーという
● すべての属性を含む集合は常にスーパーキー
● 関数従属性( Functional Dependency - FD )
– あるリレーション R の見出しの 2 つの部分集合を A 、 B
とする。 R の要素の全てのタプルにおいて、 A の値が同
じならば B の値も同じである場合かつその場合だけに限
り、 B は A に関数従属すると言い、 A → B と記述する。
– →スーパーキー 見出しの任意の部分集合
● 自明な FD
62. 用語 2 解説
name fighting_style age
範馬刃牙 総合格闘技 19
範馬勇次郎 総合格闘技 38
愚地独歩 空手 57
ビスケットオリバ 怪力 40
ビスケットオリバ 柔道 40
花山薫 素手喧嘩 20
烈海王 中国拳法 30
烈海王 ボクシング 30
FD
name の値が同じなら
age の値は常に同じ
候補キー
図に描くときは
アンダーラインをひく
64. 繰り返しグループ
name fighting_style
範馬刃牙 総合格闘技
範馬勇次郎 総合格闘技
愚地独歩 空手
ビスケットオリバ 怪力
花山薫 素手喧嘩
海王烈 中国拳法
name fighting_style1 fighting_style2
範馬刃牙 総合格闘技 NULL
範馬勇次郎 総合格闘技 NULL
愚地独歩 空手 NULL
ビスケットオリバ 怪力 柔道
花山薫 素手喧嘩 NULL
海王烈 中国拳法 ボクシング
属性追加
同じ性質の
ものじゃね?
66. 属性のデータ型
● アトミック
– ≠ スカラ
– 文字列はアトミックか?
● substring で分解可能
● データ型=ドメイン
– ドメインという有限集合に含まれる要素の「ひとつ」
– ひとつの値として扱えるものならどんなデータ型でも良い
● 配列、ベクトルやリレーションを属性にすることも可
– SQL にはないデータ型でもリレーショナルモデル的には
アリ
● SQL にはないデータ型を扱いたい場合には工夫が必
要
– ポインタ、 NULL は不可
69. 2NF でないリレーションの例
name fighting_style age
範馬刃牙 総合格闘技 19
範馬勇次郎 総合格闘技 38
愚地独歩 空手 57
ビスケットオリバ 怪力 40
ビスケットオリバ 柔道 40
花山薫 素手喧嘩 20
烈海王 中国拳法 30
烈海王 ボクシング 30
FD
name の値が同じなら
age の値は常に同じ
70. FD を解消する
● 無損失分解する
– 必要な操作は射影
– {name,fighting_style,age}
● FD: name → age
● FD を含む属性の射影 +FD の非キー属性(この場合
は age )を取り除いた属性の射影
● {name,age},{name,fighting_style}
● 逆説
– FD があるかどうか疑わしいときには射影によって無損失
分解ができるかどうかを試してみるのもアリ。
– 射影 = SELECT DISTINCT
71. 2NF の例
name fighting_style
範馬刃牙 総合格闘技
範馬勇次郎 総合格闘技
愚地独歩 空手
ビスケットオリバ 怪力
ビスケットオリバ 柔道
花山薫 素手喧嘩
烈海王 中国拳法
烈海王 ボクシング
name age
範馬刃牙 19
範馬勇次郎 38
愚地独歩 57
ビスケットオリバ 40
花山薫 20
烈海王 30
74. 宿題:次のリレーションの FD を解消せよ
name fighting_style groundwork
範馬刃牙 総合格闘技 Yes
範馬勇次郎 総合格闘技 Yes
愚地独歩 空手 No
ビスケットオリバ 怪力 No
花山薫 素手喧嘩 Yes
烈海王 中国拳法 No
76. 3NF であって BCNF でない例
name fighting_style school
松尾象山 空手 北辰館
姫川勉 空手 北辰館
丹波文七 柔術 竹宮流
丹波文七 空手 丹波流
長田弘 プロレス FAW
長田弘 柔術 竹宮流
藤巻十三 柔術 竹宮流
FD: school → fighting_style
77. 用語 3
● 結合従属性( Join Dependencies - JD )
– BCNF で FD の話は終わり
– 4NF 〜 6NF は JD の話
– Join すると元に戻るような無損失分解
– A,B,...,C をリレーション R の見出しの部分集合であると
する。もし A,B,...,C に対応するリレーションを結合した結
果と R が同じ場合かつその場合に限り、 R は以下の JD
を満たすという。
☆{A,B,...,C}
78. JD の例
A B
A1 B1
A1 B2
A2 B1
A2 B2
A3 B1
A3 B2
B
B1
B2
A
A1
A2
A3
80. 用語 4
● MVD の JD を用いた定義
– A,B,C をリレーション R の見出しの部分集合であるとす
る。 A,B,C が以下の JD を満たす場合かつその場合に限
り、 B および C は A に多値従属するという。
☆{AB,AC}
● MVD の記述法
– A →→ B
– A →→ C
81. BCNF であって 4NF でない例
name fighting_style match
松尾象山 空手 試合
松尾象山 空手 道場破り
松尾象山 空手 喧嘩
丹波文七 空手 試合
丹波文七 空手 喧嘩
丹波文七 空手 路上
丹波文七 柔術 試合
丹波文七 柔術 喧嘩
丹波文七 柔術 路上
長田弘 プロレス 試合
長田弘 プロレス 道場破り
長田弘 柔術 試合
長田弘 柔術 道場破り
82. 4NF 〜 6NF のヒント
● 非キー属性がある BCNF に自明でない JD はない
– 何故ならば、候補キーがバラバラになるような射影をとる
と FD が消失してしまう。
● FD: →候補キー 非キー属性
– 自明な JD とは、複数の非キー属性があるリレーションに
おいて、それぞれ候補キーを含んだ複数の異なるリレー
ションに無損失分解できるような JD 。
● 非キー属性のある BCNF は自動的に 5NF または 6NF に
なる。
96. リレーショナルモデルの外側の世界
● ≒リレーショナルモデル SQL
– SQL なら何とかできる部分がある
● 非常に容易なものもある
● 例) GROUP BY, ORDER BY
– 扱う対象によってはストアドプロシージャが必要
● SELECT を書くときの鉄則
– リレーショナルモデルで解決できる部分はリレーショナル
モデルを適用すべし。
– リレーショナルモデルにない操作を行う場合は細心の注
意を払うべし。
– リレーショナルモデルに準ずる演算を先にすべし。
● オプティマイザが一番活躍できるのはリレーショナルモ
デルの領域
97. おすすめの書籍
● SQL and Relational Theory
– データベースの実践講義は内容が少ないし古いのでお
すすめはしない。
● The Art of SQL
● プログラマのための SQL
● SQL アンチパターン
● WEB+DB PRESS
– Vol.68 〜