特定の「レコードバージョン」へのINTを保持するデータベーステーブルの列を何と呼ぶかを理解しようとしています。私は現在「RecordOrder」を使用していますが、人々はhigher = newerと考えるので、それは好きではありませんが、私が使用している方法では、lower = newer( "1"が現在のレコード、 "2"が現在のレコードです) 2番目に新しい、「3」古い、など)。「RecordVersion」を検討しましたが、同じ問題が発生するのではないかと思います。他に何か提案はありますか?「RecordAge」?
これを行っているのは、テーブルに挿入するときに、次のバージョンを確認する代わりに、書き込む前にその番号が盗まれるリスクを冒すのではなく、「RecordOrder」が0の挿入を挿入するだけだからです。 。テーブルAFTERINSERTには、そのキーのすべての「RecordOrder」番号を1つインクリメントするトリガーがあるため、挿入したばかりのレコードは「1」になり、他のすべてのレコードは1つ増えます。これにより、人の番号を取得できます。 MAX(RecordOrder)を取得して選択する代わりに、RecordOrder=1を選択して現在のレコードを選択します。
PS-私はまた、これがひどい考えである理由についての批判を受け入れており、代わりにこのインデックスを増やす必要があります。これにより、検索がはるかに簡単になりましたが、それが悪い考えである場合は、私に教えてください。
例として、データに関するいくつかの詳細:
次のデータベーステーブルがあります。
CREATE TABLE AmountDue (
CustomerNumber INT,
AmountDue DECIMAL(14,2),
RecordOrder SMALLINT,
RecordCreated DATETIME
)
私のデータのサブセットは次のようになります。
CustomerNumber Amountdue RecordOrder RecordCreated
100 0 1 2009-12-19 05:10:10.123
100 10.05 2 2009-12-15 06:12:10.123
100 100.00 3 2009-12-14 14:19:10.123
101 5.00 1 2009-11-14 05:16:10.123
この例では、顧客100に対して3つの行があります。つまり、100ドル、次に10.05ドルの借金があり、現在は何も借りていません。もう少し明確にする必要がある場合はお知らせください。
アップデート:
「RecordOrder」列と「RecordCreated」列はユーザーが使用できません。これらは内部使用のためにのみ存在し、現在の顧客レコードを特定するのに役立ちます。また、日付を使用して同じように簡単に行うことができましたが、適切に注文された顧客履歴を返すために使用できました。RecordCreatedの日付だけで「レコードバージョン」をインクリメントするのと同じことを実行できると思いますが、これにより、RecordOrder = 1が現在のレコードであることがわかり、サブクエリを実行することに戻ります。最新のレコードを判別するためのDateTimeのMAXまたはMIN。