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

最終更新日: 2022年10月24日

複合キーとは

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

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

複合キーの設定例

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

主キーとして利用する - サポート契約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を参照する項目」は「自モデル内項目へのマッピング」で主キー項目と紐付けます。これによって、この項目への入出力はすべてマッピングされた項目に対する操作に変わります。

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

モデル参照項目の設定

入力系画面では、主キー項目は隠しとします。(入力専用項目「モデル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」に転記されます。実際の検索はこれらの項目に対して行われます。

検索条件の設定

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

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

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

他モデルの参照 > チェックボックス
参照先モデルの主キーが複合キーの場合、本設定を利用することはできません。