主キーの指定最終更新日: 2021年3月3日
R8 | R9
主キーとして用いる項目の右側にある「詳細」ボタンを押下します。
「主キーとして利用する」にチェックが入っている場合、この項目は主キーになります。
このウィンドウの下部に用意されている「OK」ボタンを押下して(ウィンドウを)閉じます。
主キー指定された項目は、モデル項目一覧で鍵のアイコンが表示されます。
1つの項目だけでデータが一意に識別できるものを「単一キー」といいます。
整数型の項目を主キーに指定した場合、データの新規登録時に既存データの主キーと値が重複しないようにシステム側で連番を振ることができます。これを「人工キー(または代理キー)」と呼びます。
データの特性を活かした主キーを「自然キー」と呼びます。社員番号や品番といった業務特性上、重複しない値を主キーとして用いる場合です。
複数の項目を組み合わせてデータが一意に識別できるものを「複合キー」といいます。
複数の自然キーを組み合わせる、または自然キーと人工キーを組み合わせるといった方法があります。
「主キーの詳細」欄で「順序を利用する」にチェックが入っている場合、開始番号からユニークな番号が自動的に割り当てられるようになります。
整数(4バイト整数)、8バイト整数、文字列型。
「順序を利用する」を無効にすることもできます。この場合、主キーの値は手入力となります。
接頭語の付与、ゼロ詰め、任意の書式といった主キーの表現を拡張することができます。詳細...
利用するデータベースが「順序」(Sequence) を提供している場合、Wagby はこれを利用します。
内蔵データベース (HSQLDB) や MySQL など、順序をもたないデータベースを利用する場合は、Wagbyが内部で "seq" というテーブルを用意します。このテーブルで順序値を管理しています。
データベースへ登録される時点で値が確定されます。新規登録画面を開いた段階では順序は定まっていません。そのため、登録の前に順序値を知ることはできません。
テーブル初期化のタイミングで順序も初期化されます。[詳細...]
一度保存された主キーの値を変更することはできません。
これを踏まえて、次の方針で設計することを推奨します。
主キーに意味をもたせず、整数型かつ順序を用いるようにします。意味をもたせないことで、値の変更しなければならないという状況を発生させません。
業務要件で多いのが、複数の項目の組み合わせが一つしか存在しないことを保証するため、これらを複合キーとすることです。しかしキーの一部にしてしまうと、体系が変わったときなどに(変更できないため)対応が難しくなります。
そこでキー自体は人工キーとし、組み合わせが一つしかないことを保証したい(複数の)項目に一意制約を設定します。これで要件を満たすことができます。
主キーに複合キーを使用したとき、順序に利用できるのはいずれか一つの項目のみとなります。複数の主キー項目で順序を使う設定はできません。
主キーに人工キー(代理キー)を適用した場合でも、欠番が生じる場合があります。具体的には次のような場合です。
データベースではいくつかの順序をあらかじめメモリに保持しておくことで採番のパフォーマンスを上げるものがありますが、メモリに保持していた番号を消去することがあります。結果として飛び番号が生じます。
データベースの順序を利用しても欠番や飛び番が発生することがあります。詳細は、利用するデータベースの仕様を確認してください。
主キーの指定方法
主キーアイコン
単一キー
人工キー
自然キー
複合キー
順序
対応している型
順序を無効にする
業務ルールを加味した順序の設計
順序の実装方法
Oracle, PostgreSQL, SQL Server 2012以降, DB2
上記以外のデータベース
順序の確定
順序の初期化
仕様・制約
値を変更することはできない
できるだけ人工キー(代理キー)を使う
一意制約の設定と組み合わせる
複合キーの制約
自動採番利用時における欠番・飛び番
注意