Powered by SmartDoc

モデルのマッピング

モデルファイルの例として、会社(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についてここでは詳しく説明しません。