インピーダンスミスマッチ
インピーダンスミスマッチ(英語:impedance mismatch)とは、ある2つの物体で整合性が取れていない状態のことである。
電気回路編集
電気回路においては信号を送り出す側と受け入れる側のインピーダンスが一致していない状態をいう。 改善するにはインピーダンスの低い方に合わせる。
データベース編集
プログラミング言語とデータベースとの間で微妙に型が一致しない状態もインピーダンスミスマッチという。
たとえば文字列ひとつとってもプログラミング言語やデータベースごとに制約が微妙に異なる。
SQL (最大文字数255文字、null非許容)
name varchar(255) not null
C言語(最大文字数255バイト、null許容)
char name[256];
C#(最大文字数制限なし、null許容)
string name = null;
まず文字数。SQLやC#では全角文字も「1文字」として数えるが、C言語ではバイト数である。次にnull許容型やnull非許容型の存在の有無の違いもある。
解決策編集
プログラミング言語からデータベースを意識させないことでインピーダンスミスマッチを強制的に整合させる各種ライブラリが開発されている。重量級のものは「ORM」、軽量なものは「Micro ORM」などと呼ばれる。
これらのライブラリはプログラミング言語側の意見が優先され、特定のデータベースの固有機能は蔑ろにされる傾向がある。このような実装は最小公倍数的な実装になるため痒いところに手が届かないという欠点もあるが、異なるデータベースに比較的簡単に対応することができるという利点でもある。
ほとんどのORMではプリペアドステートメント的な当たり前のようにやっているため、SQLインジェクションなどのバグも混入しにくい。