今日話すことになった経緯というわけでここにいます。そもそもインピーダンスミスマッチってコンピュータシステムでは、物理的なちゃんとした対応があるアナロジーではないが、APIなどのようなレイヤや領域が異なるシステム間の界面(インタフェース)において、想定された設計と異なる使われ方(ユースケース)であったり、「セマンティックギャップ」がある場合に、その界面を挟んだ処理の効率の低下や、プログラミングなどの実装の工数の著しい増加などといった非効率が発生することから、そういった不整合を「インピーダンスミスマッチ」と俗に呼ぶことがある。アプリケーション開発においてしばしば発生するオブジェクト指向言語とリレーショナルデータベースとのギャップのことを指す[1]。[2]システム開発上、煩雑となりがちで生産性が著しく低下する要因として挙げられる。この問題を解決するO/Rマッピングなどの手法を説明する文脈で用いられる。Wikipediaそもそもインピーダンスミスマッチってオブジェクト指向プログラミングとリレーショナルデータベースは異なるデータモデルを持つ。リレーショナルデータベースの関係モデルは整合性を重視した2次元表の構造を持っており、データ同士は関係(リレーション)によって表現される。オブジェクト指向プログラミングのデータはひとまとまりのオブジェクトとして扱われ、関係モデルにおける関係と同じような構造を持つとすれば、オブジェクト指向としての恩恵が得られるモデル設計ができない。なんかこの説明はもにょるけど、言いたいことはなんとなくわかる。データモデルの違いの話。オブジェクトとリレーション「オブジェクトとは何か?」っていう話をし始めるとあらゆる方向からマサカリが飛んできそうなので今日はあまり踏み込まない。今日この発表においてはクラスベースオブジェクト指向における、クラスおよびインスタンス、つまりは「データとそれに付随する手続きをひとつにまとめたもの」とします。リレーショナルモデルとは何かN項関係をベースとするデータモデルで、関係とはある命題を満たすN個の項の組み合わせの集合のことをいう。要素とする集合になる。「現時点で存在を知りえない事実は存在しない」と見なすリレーショナル演算を用いることによって、ある関係から別の関係を導出することができる。関係はタプルの集合であり、タプルの形は選択演算や結合演算によって柔軟に変わる。リレーショナルモデルとERモデルRDBのテーブル、カラム、インデックス、制約などの設計に使われるモデルとしてリレーショナルモデル以外にERモデルがある。リレーショナルモデルよりむしろERモデルを用いるほうが一般的。(だと思う項中心の世界と実体中心の世界リレーショナルモデルは言うなれば項中心の世界で、その項が何者であるかはその定義域(ドメイン、データ型)によってのみ決まり、項の間に優劣や主従はない。項の間の関係はリレーショナル演算によって見出され、逆に言うとそれによってのみ項間の関係は決まる。ERモデルは実体があり、それに属する形で属性項目があるため、明確な主従がある。