主キー設計 文書番号を "カテゴリ + 年度(YYYY) + 6桁数字" とする
最終更新日: 2022年8月15日
はじめに文書カテゴリを事前に用意します。ここでは "A", "B", "C" の3つの文書カテゴリを作成してみます。
文書カテゴリが登録されるタイミングで「文書カテゴリ別採番値」に(文書カテゴリと年度に対応した)データが作成されるようにしています。値は "1" から開始するとします。
ここまでで準備完了です。
文書を新規作成します。登録画面では文書番号は表示されていません。
文書作成のタイミングで文書番号が用意されます。
「文書カテゴリ別採番値」を確認します。文書が作成されたカテゴリと年に対応した採番用数値が1つ増えていることがわかります。
複数の文書を作成した例です。それぞれの文書番号がルール通りに割り当てられています。
本サンプルで用意したモデルは「文書カテゴリ」「文書」「文書カテゴリ別採番値」です。
主キーを「識別子」としています。このため、異なる文書カテゴリが、同じ識別子を使うことはありません。
文書カテゴリ(の主キーである「識別子」)と「年」の組み合わせによる複合主キーとなります。この組み合わせに対して一つの採番値が管理されます。
文書の主キー「ID」は、意味をもたない順序値です。文書番号のルールが将来変わっても、主キーに影響はありません。文書番号は人間のために用意された管理番号です。
この例では「(意味のない)ID」を主キーとしています。一方、人間が意味を込めたい管理番号をコードとして区別しています。
IDとコードを分離することで、設計時には想定していなかったコードの重複が許容されます。またコード体系ルールが変更された場合でも既存の文書に影響はありません。もしコードを主キーとした場合、コード体系の変更により過去データの主キーを新体系でつくりなおす「洗い替え」という作業が発生します。
このようにシステム内部で利用するIDはできるだけ意味を含めないようにすることが主キー設計のポイントです。
文書カテゴリ登録のタイミングで、文書カテゴリ別採番値のレコードを登録します。文書カテゴリの主キー値が、文書カテゴリ別採番値の主キーの一部になっています。
ところで文書カテゴリ別採番値の他の項目(年、現在の値)はどこで設定するのでしょうか。
文書カテゴリ別採番値を登録するタイミングの初期値を設定するタイミングで「年」と「現在の値」をセットするようにしています。
文書作成時の初期値として「日付」を設定します。
文書登録のタイミングで、ルールに準拠した「文書番号」を生成します。
上の例では「年」としていました。そのため12月から1月に切り替わるタイミングで、採番する値は1に戻ります。これを「年度」(4月から3月まで)とするにはどうすればいいでしょうか。
[回答...]
上の例は年(または年度)切り替えの前に手動で文書カテゴリ別採番値レコードを増やしておく必要がありました。これを自動で行うには、どうすればいいでしょうか。
[回答...]
上記 1,2 を含むリポジトリを「アドオンギャラリー > 文書番号設定デモ」から入手できます。
実行例
文書カテゴリ
文書カテゴリ別採番値
文書
設定方法
文書カテゴリ
文書カテゴリ別採番値
文書
IDとコードを分離する
文書カテゴリ作成時、対応する「文書カテゴリ別採番値」を同時に作成する
文書カテゴリ別採番値の他の項目の値
文書の作成
初期値
文書番号の設定
演習
1. 年度への切り替え
2. 年が切り替わったタイミングで文書カテゴリ別採番値レコードを自動的に増やす
インストール