O/Rマッピングとは、オブジェクト指向プログラミング言語におけるオブジェクトとリレーショナルデータベース(RDB)の間でデータ形式の相互変換を行うこと。そのための機能やソフトウェアを「O/Rマッパー」(O/R mapper)という。
出典:e-Words
きょうは引用から入りましたが、これを言いかえるなら、O/Rマッパーとはバックエンドのプログラムとデータベースの間の「なかだち」の役目を果たすもの、ということです。エンジニア界隈ではぐっとつづめて「ORM」と表現することが多い印象ですね。
さて、そんなORMは、なぜ必要なのでしょうか?それは、言うなれば「オブジェクト指向と関係データベースとでは価値観が違うから」です。
オブジェクト指向は「現実世界の物事に即したデータモデル」である一方で、関係データベースは「検索やCRUDなどの処理に最適化されたデータモデル」となっている。
出典:オブジェクト関係マッピング
こうしたプログラムの設計思想の違いは「インピーダンス・ミスマッチ」とよばれます。インピーダンス(impedance)は「電流の流れにくさを表す量」も意味することばですが、それに似た「融通の利かなさ」があるわけですね。そのため、ORMの役割は両者のその「インピーダンス・ミスマッチの解消」とも言えます。
そんなORMの例として、私が触っているGolangでは「gorm」や「xorm」、「ent」などが知られています。たとえばxormでは、"id"と"name"という2つのカラムをもつデータベースに対して、Goの構造体を以下のように紐付けることができます。
type Mybook struct { Id int64 `xorm:"autoincr"` // IDは自動採番 Name string `xorm:"varchar(50)"` }