SlideShare a Scribd company logo
1 of 120
Download to read offline
「データベース実践入門」から学ぶ
リレーショナルモデル
@sota1235
アジェンダ
• はじめに
• リレーショナルモデルとは
• リレーショナルモデルの正体
• 矛盾とNULLとリレーショナルモデル
はじめに
今日伝えたいこと
• 全てをお伝えするのは無理です!
• 今日はほんの一端をお伝えします
• より深い理解は本を読みましょう
本
理論から学ぶデータベース実践入門
(WEB+DB PRESS plus)
奥野 幹也(著)
てことで
• 3点にしぼります
• リレーションとは
• リレーショナルモデルの正体
• リレーショナルモデルから見るNULLと矛盾
リレーショナルモデルとは
待て、そもそもモデルって何よ
リレーショナルモデルとは
モデリング
モデリング(英: modeling)は、広義の意味での
模型(モデル)を組み立てる事を言う。 モデリン
グ (科学的) - 機構の分からない現象を、分かりや
すい対象に置き換えて考えること。 例として、ボ
ーアの原子模型等。 3DCGの分野において、三次
元モデルを作ること。
(出典:Wikipedia)
要するに
現実世界の何かしらを
何かしらの方法で表現しようぜ!
データモデリング
• データモデリング(英: data modeling)は、コン
ピュータ科学の文脈では、何らかのデータモデリング
方法論を適用してデータモデルのインスタンスを作る
過程である。(出典:Wikipedia)
• データ・モデルは、班・要員間の意思疎通のための事
業データを文書化し、組織化し、そして特にどのよう
にデータを格納し利用するかの、応用ソフト設計のた
めの計画として使うソフトウエア工学の一つの抽象モ
デルである。(出典:Wikipedia)
要するに…(。ŏ﹏ŏ)?
• みんなで共有したいデータを何かしらの形で共
有できるよう、抽象化して扱おう
• 共有したいデータとは、私達の場合Webサービ
スで扱うデータ
• 「現実で扱うWebデータを抽象化して扱おう」
ということ
データモデリングいろいろ
• 階層型データモデル
• ネットワーク型データモデル
• 関係モデル
• オブジェクト関係モデル
• オブジェクトモデル
ん、DBはデータモデル?
DB データモデル
DB データモデル
データモデル(概念)
DB
実装
RDB リレーショナルモデル
リレーショナルモデル(概念)
実装
MySQL
SQLServer
SQLite
今日のテーマ
• RDBで採用される概念のリレーショナルモデル
• RDB = Relational Database
• リレーショナルモデルを知らずしてRDBマスタ
ーは名乗れない!
リレーショナルモデルとは
リレーショナルモデル
• 集合論/論理学に基づいて作られたデータモデル
• エドガー・F・コッドさんが作った
• かれこれ40年くらい前から存在している
突然の質問
リレーションとは何ですか?
RDBで考えてみると…
• テーブルとテーブルの関係性?
• テーブル設計?
• テーブル?カラム?
正解
リレーション = テーブル
• テーブルがリレーションに該当します
• テーブル同士の関係はリレーションではない
• 直訳だとrelation(関係)だからややこしいよね
RDBのことは一旦忘れる
What s relation ?
• 見出しとタプルのペアの集合
• 集合なので重複が無く、順番がない
リレーションの図
名前:年齢:性別
見出し
杉浦颯太:23:男性
タプル
社畜太郎:48:男性
労働好男:32:男性
リレーションの特徴
• リレーションはそれ同士で演算ができる
• 演算の結果もリレーションである
• 閉包性(クロージャ・プロパティ)
代表的な演算
覚える必要はないです、が
リレーションとはなんぞやを掴むために…
制限
• リレーションに対して条件で制限をかける
• SQLでいうWHERE句に相当
• 「名前が 太郎 のタプルをとる」
射影
• リレーションに対して取得するタプルを制限す
る
• 射影することで重複したタプルはマージされて1
つになる
• 集合に同じ要素は2つ存在できない
• 「 名前 と 年齢 だけ取得する」
和
• 2つ以上のリレーションを足し合わせる
• SQLで言うと UNION
• 当然、被る要素はマージされる
積
• 2つ以上のリレーションの共通タプルのみを取り
出す
• 集合演算を知ってる人はA Bのほうが分かりや
すいかも…
差
• 2つのリレーションの引き算
• 片方にあるタプルのみを返す
• どちらから引くかで結果が変わる
直積
• 2つのリレーションのタプルを全て組み合わせた
リレーション
• Aの要素数が3, Bの要素数が2であれば2 3で
6個のタプルが得られる
結合
• 共通の見出しを持つ2つのリレーションで、その
見出しの共通の値が同じタプル同士を組み合わ
せたリレーションを返す
• (要するにINNER JOINです…)
リレーションにおけるデータ型
• 通常のプログラムと同じ、文字列型、整数型等と同じ
• それらのとりうる値には必ず有限ある
• 例:整数型で4桁まで記録できる -> とりうる値は
0 9999
• 言い換えるとデータ型でさえも集合であると言える
• 集合大事!
リレーションからデータを取る
• これらの演算を用いてリレーションから必要な
データを取得する
• これすなわちSQLを書くことと同義である
• つまりRDBがリレーショナルモデルの恩恵を受
けるにはリレーションに対し深い理解が必要
リレーショナルモデルの正体
おさらい:リレーショナルモデルとは
• 集合論/論理学に基づいて作られたデータモデル
• エドガー・F・コッドさんが作った
• かれこれ40年くらい前から存在している
おさらい:リレーショナルモデルとは
• 集合論/論理学に基づいて作られたデータモデル
• エドガー・F・コッドさんが作った
• かれこれ40年くらい前から存在している
ヒント
• 集合論
• 論理学
集合学
とか とか
集合とは
• 集合とはある要素を1つの決まりでまとめたもの
• 集合に含められるか不明なものは要素としての
情報が不十分
集合の性質その①
集合要素に不確定要素はない
集合要素に不確定要素はない
• 要素が集合に含まれるかどうか判別可能
集合要素に不確定要素はない
• 🙆 犬は動物という集合の1要素である
• 犬であれば動物である
• 🙅 田中太郎は寒い人集合の1人である
• 田中太郎が寒く無い時は集合の要素として不的確
• そもそも本当に寒いと思ってるか分からない
集合の性質その②
集合の要素は重複しない
集合の要素は重複しない
• 集合は配列ではない
• 集合は情報の集まり
• 「犬は動物である」
• 「犬は動物なんだ!」と2回主張する意味は無い
集合の要素は重複しない
動物
魚
犬
象
集合の要素は重複しない
動物
魚
犬
象 「魚/犬/象は動物である」
[ 魚 , 犬 , 象 ]
集合の性質その③
集合の要素はそれ以上分解できない
集合の要素はそれ以上分解できない
• 「杉浦家のペットは哺乳類である」は不適切
• ペットに熱帯魚がいる可能性がある
• 不確定要素
• 「杉浦家のペット」を分解した後、「哺乳類」
集合に含むかどうかを判別すべき
集合の要素はそれ以上分解できない
哺乳類
杉浦家のペット
?
魚を飼ってる
かもしれない
集合の要素はそれ以上分解できない
哺乳類
杉浦家のペット
猫
犬
分解することで
要素が確定
集合まとめ
• 集合とはある決まりで要素をまとめたもの
• 集合要素に不確定要素はない
• 集合に重複は存在しない
• 集合の要素はそれ以上分解できない
論理学
「⃝⃝ならば⃝⃝である」
論理学とは
• ガチで解説すると大学授業半期分になるので端
折ります
• 本日のキーワードは命題と述語論理
命題とは
• 命題とは「⃝⃝であれば⃝⃝である」という事
実のこと
• 命題が真か偽か必ず導き出さなければいけない
• 🙆「犬は動物である」
• 🙅「この像は美しい」
命題論理つまみ食い
• 命題A「杉浦は社畜である」
• 命題B「社畜は残業が好き」
• 命題A, Bはともに真であると仮定する
命題論理つまみ食い
• 命題A
• (杉浦である) (社畜である)
• 命題B
• (社畜である) (残業が好きである)
• ここから導き出される命題は
• (杉浦である) (残業が好きである)
命題論理まとめ
• 様々な定理を元に事実を導き出すのが命題論理
• その事実の真偽を論理的に突き詰める
命題論理の限界
• 命題論理は現実世界を表現、モデリングした学
問とも言える
• しかしながら現実世界を全て表現できるわけで
はない
「この会社の何人かは社畜である」
この命題を命題論理でさばいてみる
命題論理を用いる
• 以下の論理を考えてみる
• (この会社の社員である) (社畜である)
• 一見それっぽいが 何人かは というフレーズがこ
れを崩壊させる
• 🙆「この会社の社員は全員社畜である」
• 🙅「この会社の何人かは社畜である」
命題論理を用いる
• 「何人かは」という言葉から、全ての社員が社畜
であるわけではない
• つまりこの命題は真偽が不明
• 「この会社の何人かは社畜である」という事実を
命題論理で表現するのは困難
• 命題論理は「何人かは」と言った量の表現が困難
述語論理「待たせたな」
述語論理で扱う量化
• 集団を対象に真偽値を扱うための概念が量化
• 述語論理で登場する量化の概念は基本、2種類
• ある集団の要素のすべてがある性質を満たすか
• ある集団の要素にはある性質を満たすものが存在するか
述語論理つまみぐい
• 「全て」を意味する論理記号:
• 「存在する」を意味する論理記号:
述語論理つまみぐい
• 「会社の社員は全員社畜である」
• 「xは社畜である」という命題を F(x)という関
数で表す
• xF(x) で表現される
述語論理つまみぐい
• 「この会社には定時退社奴がいる」
• 「xは定時退社奴である」という命題をF(x)とい
う関数で表す
• xF(x)で表現される
論理学まとめ
• 論理学とは真偽の定まる命題を元に様々な事実
を導き出す学問
• 複数の要素を扱うには量化の概念を取り入れた
述語論理を利用する
リレーショナルモデルとは
リレーション、集合論、論理学を元に
リレーショナルモデルの正体を探ります
リレーションは集合
• リレーションは集合を拡張した概念と言うこと
ができます
• なので従来の集合演算 + リレーション独自の演
算を行う事が可能です
リレーションは集合
集合論
リレーション
集合と述語論理は等価
• 結論から言いました٩(ˊᗜˋ*)‫و‬
集合と述語論理は等価
• 述語と集合は等価に置き換えが可能です
• 確定要素をある集団に対して満たす要素がある
のかを探る点で同じ
キリンで試す
集合
• 「キリンは動物である」を集合で表現する
• 太郎と花子は元気なキリンです
集合
• 「キリンは動物である」
動物
太郎
キリン 花子
キリン
述語
• 「キリンは動物である」を述語で表現する
述語
• x はキリンである (F(x)とする)
• x は動物である (G(x)とする)
• すなわち、あるxに対して以下が成り立つ
• F(x) G(x)
• (論理学で書くならF(x) G(x))
F(x) G(x)を読み解く
• 「F(x)が真ならばG(x)は常に真」
• 「G(x)が真なxの中にF(x)が真であるxが存在す
る」と言い換えることができる
述語
• F(x)が真な全てのx (花子、太郎)
動物 G(x)
花子
キリン F(x)
太郎
キリン F(x)
述語
• F(x)が真な全てのx (花子、太郎)
• あれ、これ集合では…?
動物
花子
キリン 太郎
キリン
集合と述語は等価
集合論
リレーション
述語論理
等価
集合と述語は等価
• 集合論も論理学も真偽の問える事実が前提に成
り立つ学問
• 事実を集団として捉えているので等価に扱うこ
とができる
つまり
全てのリレーションには対応する述語が存在する
例
• 一見するとただのリレーション
name age
ほげ 20
もげ 30
ふが 40
もが 50
述語を考える
• 「xという人の年齢はyである」
という述語でリレーションを表
現できる
• F(x, y)という関数で上記の命題
を表現する
name age
ほげ 20
もげ 30
ふが 40
もが 50
述語を考える
• このリレーションは「F(x, y)を
代入すると真になる集団である」
と言い換えることが可能
• 論理式
• x,y F(x, y)
name age
ほげ 20
もげ 30
ふが 40
もが 50
何が嬉しいのか
• リレーションに対しては述語論理を用いた演算
処理を行うことが可能
• 全てのリレーションは真の命題、つまり事実集
合であり、それらを演算して得られる結果もま
た事実集合であると言える
矛盾とNULLとリレーショナルモデル
DBの話になると怖いおじさん
• 「NULL可テーブル入れんな殺すぞ」
• 「正規化しろ、殺すぞ」
なぜなのか
NULLの功罪
なぜNULLは嫌われるのか
NULLとは
• RDBにおけるNULLとはUnknownということ
• プログラミング言語における未定義, 空っぽとい
う意味とは全く違う
• NULLは犬かもしれないし、太郎かもしれない
し、100かもしれない
RDB視点で見るNULLの功罪
• 二値論理が三値論理に変わるためSQLが冗長に
なる
• WHERE hoge IS NOT NULL and hoge > 100
• オプティマイザのパフォーマンス低下
リレーショナルモデルから見るNULL
• そもそもNULLという概念が存在し得ない世界
• NULLがあるということはそれはもうリレー
ショナルモデルではない
おさらい
• リレーショナルモデルの基底には集合論、述語
論理がある
集合論視点
おさらい:集合の性質
• 集合要素に不確定要素はない
• 集合の要素は重複しない
• 集合の要素はそれ以上分解できない
集合の性質
• 集合要素に不確定要素はない
• NULLは不確定要素そのものなので集合論で扱えない
• 集合の要素は重複しない
• NULLが何なのか誰にもわからないので重複してるか
どうかわからない
• 集合の要素はそれ以上分解できない
• NULLの中身は分解できる不確定要素かもしれない
集合「NULLいる時は計算できんわ」
• 存在しないと仮定されてる概念を持ち込まれた
学問は破綻する
• 使えるはずだった定理が使えないので集合演算
が行えない( ꒪⌓꒪)
述語論理視点
おさらい:述語論理
• 述語論理は命題論理の上に成り立つ
• 前提となる命題があって初めて成り立つ
述語「真偽がないものはわからん」
• 命題の真偽が不明では論理演算ができない
• x が犬であるかどうか分からなければ動物であ
るかどうか分からない
• わからないという事実からはわからないという
ことしか導き出せない
リレーショナルモデルから見るNULL
• そもそもNULLという概念が存在し得ない世界
• NULLを扱うにはリレーショナルモデルは不向き
正規化おじさん
なぜ正規化しなくてはいけないのか
正規化とは
• 正規化とは「重複を減らすため」の作業
• 詳細は省略
重複 is Evil
• 集合やリレーションに重複の概念はない
• テーブルが違っても重複があるとDB全体では重
複があることになる
• すると異常が起きやすくなる
異常 #とは
• DBにおける異常とは矛盾のこと
• 矛盾があると述語論理は崩壊する
• なぜ異常が発生するのかの細かい話はまた今度
Principle of explosion
直訳:爆発の法則
Principle of explosion
• 命題論理における定理の1つ
• ざっくり言うならば「矛盾が存在するとどんな
命題でも真が導き出せる」定理
Principle of explosion
• 「太郎は犬である」データと「太郎は犬でない」
データが存在するとする
• この2つの事実から論理演算を行うとどんな突拍
子のない命題に対しても全て真を導き出せる
• データの整合性が保たれなくなる
矛盾 is Evil
• つまりデータの整合性の保たれないDBに対して
述語論理は適用できない
• 整合性を取りやすくするために正規化が大事
• 正規化、Principle of explosionは機会があっ
たら調べると吉(*́ `*)
まとめ
まとめ
• とはいえ、現実にはリレーショナルモデルで表
現しきれない世界がある
• 大事なのは何がリレーショナルモデルに向いて
いるかを意識しながらRDBを扱うことかなと思
います
• 世界広すぎて資料作るの大変だったので後は各
自!!!本を読みましょう!!!
以上٩(ˊᗜˋ*)‫و‬

More Related Content

More from Sota Sugiura (9)

TechCrunchTokyo Hackathon 2015
TechCrunchTokyo Hackathon 2015TechCrunchTokyo Hackathon 2015
TechCrunchTokyo Hackathon 2015
 
コミットメッセージの話
コミットメッセージの話コミットメッセージの話
コミットメッセージの話
 
HTTP2入門
HTTP2入門HTTP2入門
HTTP2入門
 
HTTP入門
HTTP入門HTTP入門
HTTP入門
 
今さら聞けないXSS
今さら聞けないXSS今さら聞けないXSS
今さら聞けないXSS
 
各ブラウザでの均等割り付け比較
各ブラウザでの均等割り付け比較各ブラウザでの均等割り付け比較
各ブラウザでの均等割り付け比較
 
GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話
 
Promiseでコールバック地獄から解放された話
Promiseでコールバック地獄から解放された話Promiseでコールバック地獄から解放された話
Promiseでコールバック地獄から解放された話
 
Web Audio API 入門
Web Audio API 入門Web Audio API 入門
Web Audio API 入門
 

「データベース実践入門」から学ぶリレーショナルモデル