Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【ORM不要論の歴史】なぜ生まれ、20年前に何を言われたか

 【ORM不要論の歴史】なぜ生まれ、20年前に何を言われたか

Avatar for 赤神青空

赤神青空 PRO

September 10, 2026

Video

More Decks by 赤神青空

Other Decks in Programming

Transcript

  1. ▪JavaでDAOを手書きした場合(一部) ORMなしで書くとこうなる 中身を読む必要はありません。長いということだけが情報です。 java public User findById(long id) throws SQLException

    { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; final String sql = "SELECT id, name FROM users WHERE id = ?"; try { conn = connectionFactory.getConnection(); ps = conn.prepareStatement(sql); ps.setLong(1, id); rs = ps.executeQuery(); if (rs.next()) return mapRow(rs); return null; } finally { if (rs != null) rs.close(); } 今ココ 歴史 3/14
  2. ▪国内のJava・.NETで、ある程度の規模の案件では 2005年より前には一般化していた 当時よく使われていたのは Hibernate、iBATIS、S2Dao あたり。以下は、当時を知る書き手の回想として。 DTOのgetter/setterを全部手で書く Connection / PreparedStatement /

    ResultSet を毎回開いて閉じる 入力補完のないテキストエディタで書いている人も多かった 開発PCが貧弱でIDEを使うほうが遅い、という事情もあった 今ココ 歴史 4/14
  3. ▪上の3つを今回、下の3つを次回に見ていく 原典が挙げている6つの問題 【モデルの構造から来るもの】 継承の写像 同一性 部分取得 どれを選んでも何かを諦める 参照で見るか、状態で見るか オブジェクトは一部だけ持てない 3方式しかない

    【運用と組織から来るもの】 別物の基準が違う 半端が作れない スキーマの所有権 二重スキーマ 取得の書き方 開発チームの手を離れて凍結される コードとDDLの両方に同じ知識 どれも一長一短で決着しない 誰のものか 今ココ 2006年 定義が2箇所 QBE / QBA / QBL 9/14
  4. ▪原典が最初に挙げている問題 継承の写し方と、関連の写し方 table-per-class … クラスごとにテーブルを作る 派生クラスを1件取るのに、階層の数だけJOINが要る 「Personを全部探す」だけで、派生先の全テーブルにJOINが伸びる table-per-concrete-class … 最派生クラスだけテーブルにする

    非正規化のコストを受け入れることになる table-per-class-family … 階層まるごと1テーブル 空の列が大量に出るので、全列をNULL許容にせざるを得ない 原典は、継承の写し方と関連の写し方をひと続きで扱っている 関連先のデータを取るには、結局どこかでJOINが要る いつ取りに行くかは別の問題として、後段で改めて論じられる 今ココ 2006年 10/14
  5. ▪クラス階層を、どうテーブルに落とすか 継承の3方式 オブジェクト側 Person テーブル側 table-per-class PERSON Student GraduateStudent 継承は3段

    どれを選んでも代償がある STUDENT table-per-concrete-class GRAD STUDENT GRADUATE table-per-class-family PERSON(判別カラム付き) 1件取るのに階層の数だけ JOIN が要る 最派生だけをテーブルにする 非正規化のコスト 階層をまるごと1枚に入れる 全列を NULL 許容に 派生が増えるほど伸びる 同じ列が各所に重複する 整合性制約を自分から捨てる リレーショナルモデルに継承という構造が無いので、写し方は3つしかない 実装が下手だからではなく、モデルの構造がそうなっている 選択肢は3つしかなく、どれも別の代償を払う 今ココ 2006年 11/14