# CMU DB 1. Course Introduction and the Relational Model
tags: CMU DB
春休みなので中規模なソフトウェアを書いてみたいと思い, 割と評判が良いCMUのDBMSの授業を受けてみることにしました
ということで進捗を報告していきます. 間違ったことを書いていたり意味不明だとしたらごめんなさい. 動画を聞きながら書きなぐっているのでそういうことです
内容
この授業はCMUでは扱わなかったらしく, 教授が風呂場(?)で動画を取っていますw
ここではDBに関連する部分を書いていくので, この授業がOracleによって行われているなどは話しません
外観
Disk-Oriented DBMSの設計と実装に関する授業. 使い方に関しては扱わない
DBMSに関する様々なレイヤーを扱う
BusTub
というDBMSを使うらしく, ソースコードはGitHubにあるらしいです
構成は
- Disk-Oriented Storage
- Volcano-style Query Processing
- Pluggable APIs
- SQLはサポートしていない
DBMS
データベースはほとんどのアプリケーションの核である
例として音楽アプリはアーティストやアルバムの情報を扱うデータベースを使っている
CSV(comma-separated valu)ファイルも一種のデータベース
- Data Integrity
- Implementation
- Durability
という問題がある
DMBSとはアプリケーションにデータベースに情報を入れて解析することを可能にするソフトウェア
汎用目的のDMBMSは定義, 作成, 問い合わせ, 更新とデータベースの管理を許可するように設計されている
初期のDBMSは難しかった(色々あって)
Relational Model
Ted Coddによって1970年に提案されたモデルで, DBの抽象化.
- 単純なデータ構造でデータベースに入れて
- 高水準言語でデータにアクセスをし
- 物理的なストレージは実装に任せるというもの
データモデルとはデータベースのデータを記述する概念の集合
スキーマとは与えられたモデルを使って特定のデータ集合の記述するもの
DBMSにも色々なデータモデルがあるけど, この授業で扱うのはRelational
以下からRelational Modelは成り立つ
- 構造
- 内容の関係の定義
- 完備性
- データベースが制約を満たすことを保証
- 操作
- 内容のアクセスと変更方法
relationalはentities(実体)を表す属性の関係を保持する非整列な集合
タプルは関係の属性値の集合でdomain
と呼ばれる
NULL
は全てのdomainにある, 値は基本的にスカラーである
DBMSは自動で内部にprimary keyを作る. 定義をしなくても
foreign keysはあるrelationの属性から他のrelationのタプルを示すことができる
DML
Data Manipulation Languagesはデータベースから情報を入れ, 取得する方法
以下の2つの方法がある
- 手続き的
- 宣言的
- クエリがどのデータが欲しいかを指定するだけで見つけ方は指定しない
- Relational calculus
Relational Algebra
集合論に基づいて演算子を使って入力(relation)から出力(relation)を返す
- SELECT
- 条件を満たすタプルの部分集合を選ぶ
- 複数の条件を組み合わせることが可能
- $σ_{\text{predicate}}(R)$
- PROJECTION
- 指定された属性のみを持つタプルのrelationを生成する
- $\Pi_{A_{1} , A_{2} , \dots , A_{n} } (R)$
- UNION
- 入力のrelationで少なくとも1つに現れるタプルを全て保持するrelationを生成する
- $(R \cup S)$
- INTERSECTION
- UNIONではどちらかだったがこちらはどちらも
- $(R \cap S)$
- DIFFERENCE
- 最初のrelationに出てくるが2つ目のrelationには出てこないタプルを持つrelationを生成する
- $(R - S)$
- PRODUCT
- 全ての組み合わせを生成する
- $R \times S)$
- JOIN
- 少なくとも1つ共通する性質を持つ入出力の2つのタプルの全ての組み合わせを持つrelationを生成
- $(R \bowtie S)$
他にも色々ある
クエリはSQLがデファクトスタンダードになっている
結論
データベースはどこでも使われている
Relational algebraがRDBのクエリの処理を基本処理を定義している
クエリの最適化・実行について話す時にまたRelational algebraを扱う