主キーの指定
最終更新日: 2025年1月13日
R8 | R9
主キー指定された項目は、モデル項目一覧で鍵のアイコンが表示されます。
1つの項目だけでデータが一意に識別できるものを「単一キー」といいます。
整数型の項目を主キーに指定した場合、データの新規登録時に既存データの主キーと値が重複しないようにシステム側で連番を振ることができます。これを「人工キー(または代理キー)」と呼びます。
データの特性を活かした主キーを「自然キー」と呼びます。社員番号や品番といった業務特性上、重複しない値を主キーとして用いる場合です。
複数の項目を組み合わせてデータが一意に識別できるものを「複合キー」といいます。
複数の自然キーを組み合わせる、または自然キーと人工キーを組み合わせるといった方法があります。
複合キーの詳細WDN
「主キーの詳細」欄で「順序を利用する」にチェックが入っている場合、開始番号からユニークな番号が自動的に割り当てられるようになります。
整数(4バイト整数)、8バイト整数、文字列型。
「順序を利用する」を無効にすることもできます。この場合、主キーの値は手入力となります。
接頭語の付与、ゼロ詰め、任意の書式といった主キーの表現を拡張することができます。詳細...
利用するデータベースが「順序」(Sequence) を提供している場合、Wagby はこれを利用します。
内蔵データベース (HSQLDB) や MySQL など、順序をもたないデータベースを利用する場合は、Wagbyが内部で "seq" というテーブルを用意します。このテーブルで順序値を管理しています。
データベースへ登録される時点で値が確定されます。新規登録画面を開いた段階では順序は定まっていません。そのため、登録の前に順序値を知ることはできません。
テーブル初期化のタイミングで順序も初期化されます。[詳細...]
順序を利用した場合、前後のデータの主キー値が予想できるため、アドレスバーに直接、主キー値を入力してデータを閲覧することが可能になります。
これを避けるため、ランダムな値を設定する方法を説明します。
文字列の乱数は1文字あたり55パターンとなります。(a-z, A-Z, 0-9 のいずれか、ただし i や 0 など除外文字を除く) 10文字だと 55 x 55 x ... 55 となるため重複する可能性は著しく低いです。
それでも重複した場合は Wagby の標準動作で、そのデータの登録に失敗するため、同じ主キー値でデータが格納されることはありません。
主キー項目が文字列型で、テーブル定義の型に「char(10)」など固定長の定義を行っていた場合、固定長文字列となります。
このとき、定義したデータ長より短い値を登録すると、データベース側で自動的に入力データの後ろに半角スペースが詰められて登録されます。(例. 'ABC' => 'ABC ')
このためWebアプリケーションの画面から入力された主キーの値と、実際にデータベースに登録された値が異なる状況となります。この影響で、登録処理後の詳細画面への遷移に失敗します。
この対策方法を説明します。
詳細画面表示時に、自動的に主キーの値に空白を含めてデータベースを検索します。そのためこの問題は生じません。
当該項目の「初期値 - 登録時」に、次のような設定を行うことで回避できます。(以下は固定長5文字の場合)
一度保存した主キーの値を変更することはできません。
キーに順序を適用した場合に欠番が生じることがあります。具体的には次のような場合です。
主キーの指定方法
主キーアイコン
単一キー
人工キー
自然キー
複合キー
順序
対応している型
順序を無効にする
業務ルールを加味した順序の設計
順序の実装方法
Oracle, PostgreSQL, SQL Server 2012以降, DB2
上記以外のデータベース
順序の確定
順序の初期化
ランダムな値
RANDSTRを用います。ここでは引数に "10" を指定し、10文字としています。この値は(利用するデータベースの文字列型のサイズ内で)自由に指定できます。
RANDSTR(10)IF(ISEMPTY(Me()), RANDSTR(10), Me())値が重複する可能性
固定長文字列の扱い
R9.2.11/R9.3.4以降のバージョン
R9.0.x/R9.1.x/R9.2.10/R9.3.3までのバージョン
仕様・制約
値を変更することはできない
自動採番利用時における欠番・飛び番
型による制約

