一つの子に複数の親を紐づける

最終更新日: 2021年7月20日

モデルの説明

品目モデル、倉庫モデル、倉庫在庫モデルの関係を示します。倉庫在庫モデルは親となる品目モデル、倉庫モデルの主キーを保持します。

品目、倉庫、倉庫在庫の関係

倉庫モデル

倉庫モデルのデータ例を示します。

倉庫モデル

品目モデル

品目モデルのデータ例を示します。

品目モデル

倉庫在庫モデルの登録 - 倉庫から

倉庫モデルの詳細画面から(子である)倉庫在庫モデルの作成を行います。

倉庫在庫モデルの新規作成

親となる倉庫は、この時点で確定しています。

親(倉庫)は初期値としてセットされている

もう一方の親である、品目を手動で設定します。

品目をセットする

子である倉庫在庫モデルの登録が完了しました。いずれの親の画面へも遷移することができます。

倉庫在庫モデルの登録が完了した

倉庫在庫モデルの登録 - 品目から

今度は、品目モデルの詳細画面から(子である)倉庫在庫モデルの作成を行います。

倉庫在庫モデルの新規作成

親となる品目は、この時点で確定しています。

親(品目)は初期値としてセットされている

もう一方の親である、倉庫を手動で設定します。

倉庫をセットする

子である倉庫在庫モデルの登録が完了しました。いずれの親の画面へも遷移することができます。

倉庫在庫モデルの登録が完了した

親の詳細画面に紐づく子の確認

品目モデルの詳細画面では、紐づく(子である)倉庫在庫モデルの一覧を確認できます。

品目モデルの詳細画面

同様に、倉庫モデルの詳細画面でも、紐づく(子である)倉庫在庫モデルの一覧を確認できます。

倉庫モデルの詳細画面

一意制約

今回のサンプルでは、同じ品目(ID)と倉庫(ID)の組み合わせを複数、登録できないようにしています。具体的には品目IDと倉庫IDのペアで一意制約を設定しています。そのため、重複するデータを登録することはできません。

設定方法

3つのモデル

今回、用意する品目、倉庫、倉庫在庫モデルを設定します。

設定するモデル一覧

品目モデル

品目モデルは、品目コードと品目名を管理します。

品目モデルの設定

倉庫モデル

倉庫モデルは、倉庫コード、倉庫名、住所を管理します。

倉庫モデルの設定

倉庫在庫モデル

倉庫在庫モデルは、品目と倉庫を主キーかつ外部キーとして用意します。

倉庫在庫モデルの設定

「品目」項目はモデル参照(検索)です。参照先モデル項目は(主キーである)品目IDではなく、現場の利用者が使いやすいと思われる品目コードを表示する設定としました。

※ 「参照先モデル項目」の設定は、あくまでも画面に表示される項目です。システム内部では、主キーの値(ここでは「品目ID」)を保持しています。
品目項目のモデル参照設定

品目コードを外部キーとします。また、倉庫コードとのペアで一意制約を設定しています。(一意制約名は任意ですが、モデル名の英字表記をアンダースコア文字で連結するとわかりやすいです。

品目項目の外部キー設定

「倉庫」項目もモデル参照(検索)です。参照先モデル項目は(主キーである)倉庫IDではなく、現場の利用者が使いやすいと思われる倉庫コードを表示する設定としました。

※ 「参照先モデル項目」の設定は、あくまでも画面に表示される項目です。システム内部では、主キーの値(ここでは「倉庫ID」)を保持しています。
倉庫項目のモデル参照設定

倉庫コードを外部キーとします。また、品目コードとのペアで一意制約を設定しています。(一意制約名は任意ですが、モデル名の英字表記をアンダースコア文字で連結するとわかりやすいです。

倉庫項目の外部キー設定