主キー

最終更新日: 2022年5月26日

主キーとは

Wagbyで管理する、すべてのデータは「主キー」という値を持つようになっています。

主キーは特別なモデル項目であり、次の性質があります。

  • 同じモデルで、主キーの値はすべてユニーク(一意)となっています。値が重複することはありません。
  • 主キーの値は必ず設定されています。未設定 (null) という状態は認められません。
  • 主キーは一度、値が定まると、変更することができません。つまり更新画面で主キーの値は常に読み込み専用(または隠し項目)と扱われます。

標準では、Wagbyで作成したモデルには必ず "ID" という名前の項目が付与されています。整数型かつ順序を利用する、となっています。これによって主キーには重複のない値(順序値)が自動的に割り当てられます。

主キー指定された項目は、モデル項目一覧で鍵のアイコンが表示されます。

主キー項目には鍵アイコンが表示される

主キー項目を変更する

項目名を変更する

主キーの項目名は標準では "ID" となっています。これを変更することができます。

主キー項目の名前を変更する(1)
主キー項目の名前を変更する(2)

型を変更する

主キー項目の型を変更することもできます。利用できる型は次のとおりです。

備考
整数 順序を利用するかどうか、も同時に設定できる。
文字列
日付 時刻および日付時刻は利用できない。また日付の書式は yyyy-MM-dd 固定となる。
モデル参照 リストボックス、ラジオボタン、検索画面のいずれか。チェックボックスは利用できない。

開発中に型を変更した場合

すでに(開発環境のデータベースに)データが登録されている状態で、既存項目の「型」を変更すると、旧データが読み込めずにエラーになることがあります。例えば文字列型を数字型に変更してしまうと、数字に変更できない文字はすべてエラーになってしまいます。

この場合は開発環境のデータベースを初期化してください。これまでのデータが消去され、新しいテーブル定義にテストデータを追加することができるようになります。

本番環境へ転送後は型の変更ができません

一度本番環境へ転送すると、項目の型の変更はできません。型を変更する必要が生じた場合、改めて新しい項目を定義し、その後、旧項目を削除してください。すでに登録済みのデータがある場合、そのデータは使えなくなります。CSV形式でダウンロードし、変更後にアップロード更新を行うといった対応が必要になります。

順序の詳細

主キーが整数型の場合、順序を利用することができます。

  • 開始番号は1000からです。新規登録のたびに1ずつ増えます。
  • 値は欠番・飛び番が生じることがあります。具体的には次のような場合です。
    • 何らかの理由で登録処理がデータベース側でエラーとなった。
    • そのデータを削除した。

順序を無効にする

「順序を利用する」を無効にすることもできます。この場合、主キーの値を手入力とするため、あわせて入力制御タブの隠し項目設定を解除します。

隠し項目の設定を解除する

順序の開始番号を変更する

標準では1000から開始されます。この開始値を変更することができます。変更する場合は、1以上の値を指定してください。

主キーの詳細設定

注意

順序を利用した場合でも主キーの値が連続であることを前提にしないようにしてください。

主キーの詳細

サロゲートキー (代理キー)

Wagbyの標準設定です。主キー項目を "ID" とし、業務上は意味のない値(順序)を割り当てていきます。主キーの3つの性質「必須」「重複しない」「変更できない」を満たします。

自然キー

主キー項目の名前と型を適切に設定します。業務上、この値は「必須」「重複しない」「変更できない」という特性が必要な項目は主キーとして利用できます。例えば商品モデルにおける商品コードや、顧客モデルにおける顧客コードなどが考えられます。

複合キー

複数の項目の組み合わせによって主キーの性質「必須」「重複しない」「変更できない」を満たす場合に設定できます。Wagbyでは複数の項目に「主キーとして利用する」を有効にすることができます。これによって複合キーを実現します。

複合キーの設定

主キー設計のヒント

主キー設定のためのヒントを整理しました。

方針 メリット デメリット
単一&サロゲートキー シンプルで開発しやすい。SPA UIにも対応している。 モデル同士の関係性がわかりにくい。スクリプト利用時、必ずIDを経由しないと目的のデータを取得できない。
単一&自然キー モデル同士の関係性がキーから把握できる。スクリプト利用時、主キーの値から目的のデータを取得しやすい。 主キーの設計は慎重に行う必要がある。業務上、重複しないと想定していたデータに重複(または値が未設定)が見つかった場合、主キーとして利用できなくなる。SPA UIに未対応。
複合&自然キー 単一キーと複合キーの組み合わせにより、より自然にモデルの関係性を表現できる。

サロゲートキーを利用するが、別の項目に主キーの意味を持たせる設計の妥当性

サロゲートキーではない項目を「必須」かつ「一意制約をチェックする」とします。
さらに「入力制御>読み込み専用>更新画面」を設定すると、アプリケーションの更新画面に限って、更新不可とすることができます。

これらの設定の組み合わせでで、その項目を意味的に主キーと同等とすることができます。複数の項目の組み合わせで一意制約を設定すると、複合キーと同等になります。

問題点

自然キー(およびその組み合わせによる複合キー)は、データベースが主キーの値を保証します。具体的には、データベースに存在する値は「未設定なし」「重複なし」「更新されない」が守られるため、この点でのデータ異状はありえない、と考えてよいです。

サロゲートキーを使う場合、主キー相当の項目に対して必須指定かつ一意制約指定を行うことで「未設定なし」「重複なし」は保証されますが、「(一度設定された値が)更新されない」はデータベースでは保証されません。例えばスクリプトで直接、値を書き換えることができます。この場合、当該データを参照している側が何らかの影響を受ける可能性があります。

主キーを説明するその他のページ