Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

1.460 visualizaciones

Publicado el

社内勉強会向け

Publicado en: Tecnología
  • Sé el primero en comentar

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

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

×