主キーの設計 (2) 複合キー

最終更新日: 2023年7月10日

複合キーとは

複数の項目を組み合わせてデータが一意に識別できるものを「複合キー」といいます。 複数の自然キーを組み合わせる、または自然キーと人工キーを組み合わせるといった方法があります。

複合キーを設定したモデルは、鍵アイコンが複数個、付与されます。

複合キーの設定例

主キーとして用いる項目に、それぞれ「主キーとして利用する」設定を有効にします。

主キーとして利用する - 商品ID
主キーとして利用する - 取扱区分

仕様

  • 文字列、数値、日付項目を主キーとすることができます。
  • モデル参照項目を主キーとすることはできません。この場合は「自モデル内項目へのマッピング」を設定します。詳細な設計方法を、このマニュアルの中で説明します。
  • 主キー項目は「値をデータベースに保存する」を有効にしてください。
  • 主キーに複合キーを使用したとき、順序に利用できるのはいずれか一つの項目のみとなります。複数の主キー項目がそれぞれ順序を使うという設定はできません。(上の例では「連番」は順序を利用しているため、それ以外の主キー項目は順序を使うことができません。)
  • 主キーかつ外部キーという構成ができます。

複合キーモデルを参照する

次の例では、複合キーモデル「商品」をモデル参照しています。参照先モデルが複合キーかどうかを気にすることなく、モデル参照設定を行うことができます。

複合キーモデルを参照する (1)
複合キーモデルを参照する (2)

実行例

複合キーモデルを参照した新規登録画面です。ここでも参照先モデルが複合キーかどうかを気にすることなく、利用することができます。

複合キーモデルを参照する動作

Webフォームのパラメータ

複合キーを利用した場合、Wagbyが生成するWebフォームでは次のような形式でデータを扱います。

value1$SEP$value2$SEP$...

ここで value1, value2 はそれぞれ主キー1の値、主キー2の値です。"$SEP$" が値の区切り文字となります。

REST API で複合主キーを指定する

複合主キーのモデルを REST API で利用することができます。詳細は REST API 仕様をお読みください。

主キーにモデル参照項目を含める(マッピング)

モデルAが複合主キーを持つ場合を考えます。

モデルAは複合主キーをもつ

モデルAを参照するモデルBでは、主キー項目をモデルAと同じように設定してください。

モデルBの主キーをモデルAにあわせる

追加した「モデルAを参照する項目」は「自モデル内項目へのマッピング」で主キー項目と紐付けます。これによって、この項目への入出力はすべてマッピングされた項目に対する操作に変わります。

この項目は主キーではない、とします。また、入力専用項目であるため、データベースへの保存も不要です。

モデル参照項目の設定(1)
モデル参照項目の設定(2) マッピング

また、この項目を必須項目とします。必ず主キー項目へ転記するためです。

主キー参照項目は必須とする

入力系画面では、主キー項目は順序利用なし、かつ隠しとします。入力専用項目の入力値が自動的に転記されるためです。

二つの主キー項目いずれにも同じ設定を行なってください。

主キーは順序利用なし
主キーは入力時、隠し項目とする

まとめます。各項目は次のような定義になります。

項目主キー入力時隠し必須備考
モデルAの主キー1(解除)
モデルAの主キー2(解除)
モデルAを参照する項目--入力専用項目であり、実際の値は「モデルAの主キー1」「モデルAの主キー2」項目の値を使う。

必須の扱い

主キー項目(「モデルAの主キー1」「モデルAの主キー2」)は通常、必須項目になります。ただし今回の設定を行った場合は自動的に必須入力チェックは解除されます。その代わり「モデルAを参照する項目」を必須としてください。

検索項目の扱い

「モデルAを参照する項目」で検索したい場合、必ずこの項目と紐づく主キー「モデルAの主キー1」「モデルAの主キー2」も検索条件としてください。

「モデルAを参照する項目」はデータベースに保存せず、ここで入力した値は「モデルAの主キー1」「モデルAの主キー2」に転記されます。実際の検索はこれらの項目に対して行われます。

検索条件の設定

主キー項目はそれぞれ検索条件としては隠し項目とします。また条件式を「等しい」とします。

検索条件の設定
検索条件の設定

関連するページ

USERINFO関数
参照先のモデルが複合キーの場合、最初の主キーは "#id" ですが、二番目の主キーは "#id2" で参照します。以降、"#id3", "#id4",... となります。
アップロード更新 > 参照先モデルが複合キーの場合
複合キーを "$SEP$" で連結して設定します。

複合キーに対応していない機能

ソート >モデル参照項目のソート
参照先モデルが複合キーの場合はソートできません。
モデル参照に関する関数
参照先のモデルが複合キーの場合、モデル参照関数は利用できません。
他モデルの参照 > チェックボックス
参照先モデルの主キーが複合キーの場合、本設定を利用することはできません。
他モデルの参照 > 検索画面 > 主キーを直接入力する
参照先のモデルの主キーが複合キーの場合、本機能(チェックボックスとして参照する)は利用できません。
他モデルの参照 > 参照モデル同士の関係性で選択肢を絞り込む
指定した項目の参照先モデルの主キーが複合キーの場合、絞り込み項目に指定することはできません。
一覧更新
参照先のモデルが複合キーの場合のチェックボックス項目を扱うことはできません。