TapKitではER(エンティティリレーションシップ)モデリングを使用して、リレーショナルデータベースとオブジェクトをマッピングします。
データベースのテーブルはエンティティに、フィールドは属性にそれぞれマッピングされます。この情報を元に、データベース行はデータベースオブジェクトにマッピングされ、属性は値にアクセスするためのキーとなります。
リレーションシップは参照元の属性と参照先の属性を定義するだけの単純なものです。リレーションシップは属性と同じくデータベースオブジェクトのキーであり、データベースオブジェクトからは属性と同じようにリレーション先のオブジェクトを扱うことができます。
リレーションシップは「単一方向」です。リレーションシップには参照元のエンティティと参照先のエンティティを設定しますが、これを逆にたどることはできません。つまり、リレーションシップを両エンティティから利用したいなら、両エンティティにリレーションシップを作成する必要があります。
リレーションシップを作成すると、フレームワークは必要なテーブルを結合してリレーション先のオブジェクトをフェッチします。テーブルの結合方法には「内部結合、右外部結合、左外部結合、完全外部接合」のいずれかを設定します。
TapKitのリレーションシップには「1対1」のものと「1対多」のものがあります。「1対1」の場合はリレーション先のオブジェクトを直接参照しますが、「1対多」ではリレーション先のオブジェクトの配列を参照します。
例えばEmployee
(従業員)エンティティとProject
(プロジェクト)エンティティが「多対多」の関係にあるとき、「1対1」や「1対多」のリレーションシップでは実現することができません。このような「多対多」のリレーションシップを実現するには、補助となるエンティティを作成します。
補助であるEmployeeProject
エンティティからは、Employee
エンティティとProject
エンティティに対してそれぞれ「1対1」のリレーションシップを張ります。対してEnployee
エンティティとProject
エンティティからは、EmployeeProject
エンティティに対して「1対多」のリレーションシップを張ります。