主キーの設計 (2) 複合キー
最終更新日: 2022年10月24日
複数の項目を組み合わせてデータが一意に識別できるものを「複合キー」といいます。 複数の自然キーを組み合わせる、または自然キーと人工キーを組み合わせるといった方法があります。
複合キーを設定したモデルは、鍵アイコンが複数個、付与されます。
主キーとして用いる項目に、それぞれ「主キーとして利用する」設定を有効にします。
次の例では、複合キーモデル「商品」をモデル参照しています。参照先モデルが複合キーかどうかを気にすることなく、モデル参照設定を行うことができます。
複合キーモデルを参照した新規登録画面です。ここでも参照先モデルが複合キーかどうかを気にすることなく、利用することができます。
複合キーを利用した場合、Wagbyが生成するWebフォームでは次のような形式でデータを扱います。
ここで value1, value2 はそれぞれ主キー1の値、主キー2の値です。"$SEP$" が値の区切り文字となります。
複合主キーのモデルを REST API で利用することができます。詳細は REST API 仕様をお読みください。
モデルAが複合主キーを持つ場合を考えます。
モデルAを参照するモデルBでは、主キー項目をモデルAと同じように設定してください。
追加した「モデルAを参照する項目」は「自モデル内項目へのマッピング」で主キー項目と紐付けます。これによって、この項目への入出力はすべてマッピングされた項目に対する操作に変わります。
この項目は主キーではない、とします。また、入力専用項目であるため、データベースへの保存も不要です。
入力系画面では、主キー項目は隠しとします。(入力専用項目「モデルAを参照する項目」)への入力値が自動的に転記されるためです。
一方で、入力専用項目自体は必須項目とします。主キー項目へ転記されるためです。
まとめますと、各項目は次のような定義になります。
主キー項目(「モデルAの主キー1」「モデルAの主キー2」)は通常、必須項目になります。ただし今回の設定を行った場合は自動的に必須入力チェックは解除されます。その代わり「モデルAを参照する項目」を必須としてください。
「モデルAを参照する項目」で検索したい場合、必ずこの項目と紐づく主キー「モデルAの主キー1」「モデルAの主キー2」も検索条件としてください。
「モデルAを参照する項目」はデータベースに保存せず、ここで入力した値は「モデルAの主キー1」「モデルAの主キー2」に転記されます。実際の検索はこれらの項目に対して行われます。
主キー項目はそれぞれ検索条件としては隠し項目とします。また条件式を「等しい」とします。
複合キーとは
仕様
複合キーモデルを参照する
実行例
Webフォームのパラメータ
value1$SEP$value2$SEP$...
REST API で複合主キーを指定する
主キーにモデル参照項目を含める
項目 主キー 入力時隠し 必須 備考
モデルAの主キー1 ○ ○ (解除)
モデルAの主キー2 ○ ○ (解除)
モデルAを参照する項目 - - ○ 入力専用項目であり、実際の値は「モデルAの主キー1」「モデルAの主キー2」項目の値を使う。
必須の扱い
検索項目の扱い
複合キーに対応していない機能