「インピーダンスミスマッチ」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) (→解決策) |
Administrator (トーク | 投稿記録) (→解決策) |
||
16行目: | 16行目: | ||
=== 解決策 === | === 解決策 === | ||
− | [[プログラミング言語]]から[[データベース]]を意識させないことでインピーダンスミスマッチを強制的に整合させる各種[[ライブラリ]] | + | [[プログラミング言語]]から[[データベース]]を意識させないことでインピーダンスミスマッチを強制的に整合させる各種[[ライブラリ]]が開発されている。重量級のものは「[[ORM]]」、軽量なものは「[[Micro ORM]]」などと呼ばれる。 |
+ | |||
+ | これらのライブラリはプログラミング言語側の意見が優先され、特定のデータベースの固有機能は蔑ろにされる傾向がある。このような実装は最小公倍数的な実装になるため痒いところに手が届かないという欠点もあるが、異なるデータベースに比較的簡単に対応することができるという利点でもある。 | ||
+ | |||
+ | ほとんどの[[ORM]]では[[プリペアドステートメント]]的な当たり前のようにやっているため、[[SQLインジェクション]]などの[[バグ]]も混入しにくい。 |
2020年3月19日 (木) 01:52時点における最新版
インピーダンスミスマッチ(英語: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インジェクションなどのバグも混入しにくい。