自己紹介
- Twitter: @a_suenami
- Ruby書いてる
- 最近はフロントエンドもがんばってる
- RDBが好きなのでそれっぽいことをよくつぶやいてる
- 酒と肉が好き
今日話すこと
- 今日話すことになった経緯
- そもそもインピーダンスミスマッチって
- リレーショナルモデルとは何か
- リレーショナルモデルとERモデル
- 項中心の世界と実体中心の世界
- リレーションの種類とテーブル
- まとめ
今日話すことになった経緯
今日話すことになった経緯
今日話すことになった経緯
今日話すことになった経緯
というわけでここにいます。
そもそもインピーダンスミスマッチって
コンピュータシステムでは、物理的なちゃんとした対応があるアナロジーではないが、APIなどのようなレイヤや領域が異なるシステム間の界面(インタフェース)に
おいて、想定された設計と異なる使われ方(ユースケース)であったり、「セマンティックギャップ」がある場合に、その界面を挟んだ処理の効率の低下や、プログラミ
ングなどの実装の工数の著しい増加などといった非効率が発生することから、そういった不整合を「インピーダンスミスマッチ」と俗に呼ぶことがある。
特に、アプリケーション開発においてしばしば発生するオブジェクト指向言語とリレーショナルデータベースとのギャップのことを指す[1]。[2]システム開発上、煩雑
となりがちで生産性が著しく低下する要因として挙げられる。主に、この問題を解決するO/Rマッピングなどの手法を説明する文脈で用いられる。
by Wikipedia
そもそもインピーダンスミスマッチって
オブジェクト指向プログラミングとリレーショナルデータベースは異なるデータモデルを持つ。リレーショナルデータベースの関係モデルは整合性を重視した2次元表
の構造を持っており、データ同士は関係(リレーション)によって表現される。一方オブジェクト指向プログラミングのデータはひとまとまりのオブジェクトとして扱わ
れ、関係モデルにおける関係と同じような構造を持つとすれば、オブジェクト指向としての恩恵が得られるモデル設計ができない。
なんかこの説明はもにょるけど、言いたいことはなんとなくわかる。つまり、データモデルの違いの話。
オブジェクトとリレーション
- 「オブジェクトとは何か?」っていう話をし始めるとあらゆる方向からマサカリが飛んできそうなので今日はあまり踏み込まない。
- とりあえず今日この発表においてはクラスベースオブジェクト指向における、クラスおよびインスタンス、つまりは「データとそれに付随する手続きをひとつにまとめたもの」とします。
リレーショナルモデルとは何か
- N項関係をベースとするデータモデルで、関係とはある命題を満たすN個の項の組み合わせの集合のことをいう。
- 自然数(1以上)の項 x, y, z があった場合、x + y + z = 4 という命題に対する3項関係は (1,1,2), (1,2,1), (1,1,2) を要素とする集合になる。
- 閉世界仮説に基づく。
- 「現時点で存在を知りえない事実は存在しない」と見なす
- リレーショナル演算を用いることによって、ある関係から別の関係を導出することができる。
- 関係はタプルの集合であり、タプルの形は選択演算や結合演算によって柔軟に変わる。
リレーショナルモデルとERモデル
- RDBのテーブル、カラム、インデックス、制約などの設計に使われるモデルとしてリレーショナルモデル以外にERモデルがある。
- リレーショナルモデルよりむしろERモデルを用いるほうが一般的。(だと思う
項中心の世界と実体中心の世界
- リレーショナルモデルは言うなれば項中心の世界で、その項が何者であるかはその定義域(ドメイン、データ型)によってのみ決まり、項の間に優劣や主従はない。
- 項の間の関係はリレーショナル演算によって見出され、逆に言うとそれによってのみ項間の関係は決まる。
- ERモデルは実体があり、それに属する形で属性項目があるため、明確な主従がある。
リレーションの種類とテーブル
- 基底リレーション(base relation)と導出リレーション(derived relation)がある
- 基底リレーションは冗長性を持たない(正規化されている)リレーションで、導出リレーションは基底リレーションをもとにリレーショナル演算をした結果得られたリレーションのこと
- 保存リレーション(stored relation)というのもある
- 実際にディスクに書き込まれているリレーションで、要するに我々がテーブルとして定義するもの
- コッドは基底リレーションと保存リレーションを区別していない
まとめ: 各モデルの特徴と設計観点
こんな感じのことを意識してモデリングすればいいのではないか?(意見歓迎)
モデリング手法 | 実装対象 | 設計観点 |
---|---|---|
オブジェクト | クラス(のメンバーフィールド) | ロジック実装 |
ERモデル | テーブル、外部キー制約 | データのライフサイクル、状態遷移 |
リレーショナルモデル | クエリ、ビュー、タプル | 同時に参照/計算に利用したい |