親子関係

最終更新日: 2020年3月14日
R8 | R9

はじめに

Wagby では「1件のデータに複数のデータが存在する」関係を実現するために「外部キー」という考え方を用意しています。 具体的には、図1のようになります。

図1 親子関係のイメージ

ここで主となるモデルを「親」、親に従属するモデルを「子」と表現すると、親と子には次のような関係が成立します。

  • 親モデルと子モデルは互いに参照できるようになっている。
  • 親モデルが「参照先」となる。子モデルが「参照元」となる。子モデルは、親モデルのキーを持っており、これを「外部キー」という。
  • 一つの親モデルに対して、複数の子モデルを紐付けることができる。(1:N の関係)
  • 子モデルを独立して扱える。具体的には子モデルについての検索や一覧表示の処理を行なうことができる。
  • 親モデルが削除された場合、子モデルも同時に削除することもできる。(あえて残すこともできる。)

内容

(1) 親子関係を定義する
「顧客(customer)」と「サポート(support)」の二つのモデルを扱います。このとき「一人の顧客に対して、複数のサポート記録がある」という関係を持ちます。親が顧客(1) で、子がサポート(N)となります。
(2) 一つの親に複数の子を紐づける
「顧客(customer)」を親モデルとし、「サポート(support)」「購買履歴 (buying)」の二つの子モデルを用意する例を説明します。
(3) 親モデルが存在しないと子モデルの作成が行えないようにする
親モデルの詳細画面に、子モデルの新規登録ボタンを用意します。かつ、子モデルの新規登録ボタンは子モデル側には用意しません。これによって子のデータが存在するとき、必ず(紐づく)親は存在するという運用を実現します。
(4) 親モデルが存在しない子モデルの作成を許可する
子モデルの新規登録時に、紐づく親モデルを指定しない運用です。必要に応じて親をあとで選択できるようにします。
(5) 一つの子に複数の親を紐づける
二つの親モデル「倉庫」「品目」を参照する子モデル「倉庫在庫」の例を説明します。
(6) 親キー以外の項目値を用いて子モデル一覧表示を行う
親モデル画面に表示される子モデルは、通常、親キーによって絞り込まれます。この条件を個別に指定することで、親キーが未設定であっても子モデル一覧表示を行えるようにします。
(7) 連携に関する設定
子モデル側で設定するオプションを紹介します。
(8) 子モデルの同時更新
外部キー関係において、親モデルの更新画面上で直接、子モデルの更新を行うことができます。