モデルファイルの例として、会社(Company
)と従業員(Employee
)のシンプルなモデルを考えます。
まず、データベース上のテーブルから見ていきましょう。COMPANY
テーブルはCOMPANY_ID
(会社ID)とNAME
(名前)のフィールドを持ち、主キーはCOMPANY_ID
とします。一方EMPLOYEE
テーブルは主キーのEMPLOYEE_ID
(従業員ID)とNAME
(名前)のフィールドに加えて、外部キーとしてCOMPANY_ID
(会社ID)を持ちます。
EMPLOYEE
テーブルから見てCOMPANY
テーブルとは1対1のリレーションシップとなり、COMPANY
テーブルからはEMPLOYEE
テーブルと1対多のリレーションシップとなります。データ型はどちらもNAME
属性が文字列型、主キーと外部キーは整数型とします。
次にモデルへのマッピングですが、基本的にテーブルをエンティティに、フィールドを属性にそのままマッピングします。原則として主キーと外部キーはクラス属性に含めないので、クラス属性は両エンティティのNAME
属性のみになります。
このとき、主キー名にid
と設定しないでください。主キーをid
とすると、オブジェクトにアクセスしてもObject#id
が呼び出されてしまいます。
次にここまでのマッピングを示します。+
の属性は主キー、-
の属性はクラス属性です。
最後にリレーションシップを設定します。リレーションシップは単方向なので、両エンティティにリレーションシップを設定する必要があります。どちらのリレーションシップもcompany_id
属性を結合します。
次が最終的なマッピングです。リレーションシップもクラス属性に含めます。
では、今マッピングしたモデルをファイルに記述しましょう。モデルファイルはYAMLで記述しますが、YAMLについてここでは詳しく説明しません。