アイテムごとに一意の識別子を生成する必要があるアプリケーションがあります。この識別子は、いくつかのイニシャル、日付、および新しいアイテムごとに増分する4桁の数字を組み合わせたものです。トリッキーな部分は、最後の4桁が毎月リセットされる必要があるということです。
例として、UID 「SP-20121218-0001」があるとします。最後の4桁の「0001」は1月まで増加し、1月に作成された最初のアイテムは「SP-20130101-0001」になります。
何かご意見は?
フィールドYear、Month、CurrentCountを持つテーブルを作成します。現在の年と月の行を選択するストアドプロシージャを記述します。行が存在しない場合は、行を作成して数を増やします。
私には、これはストアド関数の完璧なユースケースのように聞こえます。
postgresqlでは、シーケンスを作成し、関数を使用してシーケンスから値を選択し、現在の日付を計算し、日付が反転したときにシーケンスをリセットすることでこれを行います。
ただし、最善の方法は、シーケンスをわざわざリセットせずに、日付を補足した一意の番号を使用することです。
考えられるオプションの1つは、データベースシーケンスに基づいて最後の4桁を作成し、新しい月が始まるときにそのデータベースシーケンスをリセットする別のプロセスを用意することです。