0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ORM概要

ORM (Object-Relational Mapping) は、プログラミングの上で、オブジェクト指向プログラミング(以下、OOP)とリレーショナルデータベース(以下、RDB)の連携を実現するプログラミング技法です。ORMを使用することで、データベースの操作を書く際にSQLを直接記述せずに、プログラム言語のオブジェクトを使用して操作を実現できます。

ORMをなぜ使うのか

OOPとRDB、これら2つがもつそれぞれのデータモデルに違いによって生じる、インピーダンスミスマッチを解消するためです。
RDBは基本的にはテーブル型のデータ構造に対し、OOPは基本的にクラス(データ+振る舞い)を階層型に持つことが多いです。
テーブルは、DBの考え方で最適化され、クラスはオブジェクト思考の考え方に沿って設計されることを考えると、二つの指向性には差異(インピーダンスミスマッチ)が生まれます。

image.png

ORMを使うには

モデルの定義

ORMでは、データベースの構造に対応するモデルを作成します。
例えば、ユーザー表は下記のようにモデルで表現されます。(例はRuby on Rails)

ruby
class User < ApplicationRecord
    # 振る舞いなどの処理
end

以下、Ruby on RailsのORMライブラリであるActive Recordを例に説明します。

レコードの作成

新しいレコードを作成する際、Active RecordはSQLを自動生成します。

ruby
# 新しいユーザーを作成
user = User.new(name: "Alice", email: "alice@example.com")
user.save

# または、1行で作成
User.create(name: "Bob", email: "bob@example.com")

生成されるSQL例

sql
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

レコードの取得

データベースからデータを取得するクエリも記述できます。

ruby
# 全てのユーザーを取得
users = User.all

# 特定の条件で取得
user = User.find_by(email: "alice@example.com")

生成されるSQL例

sql
SELECT * FROM users WHERE email = 'alice@example.com' LIMIT 1;

レコードの更新

既存のデータを更新する場合

ruby
user = User.find(1)
user.update(name: "Alice Wonderland")

生成されるSQL例

sql
UPDATE users SET name = 'Alice Wonderland' WHERE id = 1;

レコードの削除

データを削除する場合

ruby
user = User.find(1)
user.destroy

生成されるSQL例

sql
DELETE FROM users WHERE id = 1;

ORMのメリットとデメリット

メリット

生産性の向上

SQLを直接書かずにオブジェクト指向のコードを書けるため、コード量が減り、読みやすくなります。

安全性の向上

直接SQL書かないため、SQLインジェクション攻撃などの脆弱性を減らすことができます。

デメリット

学習コスト

特定のORMライブラリの使用法と動作方法の両方を学ぶ必要があります。

複雑なクエリなどは実装できない場合がある

ORMの構造から外れた変更が必要な場合は直接SQLを書かざるを得ない場合もあります。

性能問題

ORMの内部動作やクエリの最適化失敗などからパフォーマンスの問題が発生することがあります。

終わりに

読んでいただきありがとうございました!
ORMは、データ操作を短時間で実装するための有力な手段ですが、クエリへの変換が上手くいってなかったりすることもあるため昨今ではORM不要論なども持ち上がっていたりします。
ORMを利用するか、直接クエリを書くかは開発プロジェクトによっても異なると思いますが、1手段として覚えておくのが良いかと思います。

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?