顧客の入札提案の価格を設定するための新しいデータベース プロジェクトを開始しました。
データベース内の一部のテーブルには、価格テーブルなど、定期的に更新される情報が含まれています。
現在、新しい入札では常にデータベースの最新情報を使用する必要がありますが、既存の入札では、入札作成者が別の決定をしない限り、開始時に使用されたデータを使用し続ける必要があります。
入札はいかなる状況においてもバージョン間で価格を使用しないため、問題は多少単純化されているため、製品がコーストされ、価格表の古いバージョンで利用可能になったとしても、新しいプロジェクトでは利用できません.
これを実現するために、バージョン列と、おそらくリンクされたバージョン管理テーブルを含めることを計画しています。これで十分だと思います。
ただし、これは一般的なデータベース設計要件でなければならないと感じているため、既存の「ベスト プラクティス」とこれを達成するための手法が存在する必要があります。
この問題を解決する方法について何かアドバイスはありますか? また、私は Grails プラットフォームを使用しているため、Grails 固有の情報をいただければ幸いです。
問題を正しく説明したかどうかわからないので、例を次に示します。
class Bid { // Each new customer bid is stored in this table
String bidName
static hasMany = [ item: ItemList ]
static belongsTo = [ versionNumber: VersionControl]
}
class ItemList { // Products/Services are associated with a bid via this table
String description
static belongsTo = [ bid: Bid, item: Price ]
}
class Price { // The price of individual products and services the company offers
String description
Long value
static belongsTo = [ versionNumber: VersionControl]
}
class VersionControl {
/** So that when filling in the ItemList form for a bid, I can query for only
* prices with the correct version number
*/
String user
Long versionNumber
Date timestamp
static hasMany = [ bid: Bid, productOrService: Price ]
}
この例は問題なく動作し、私がやりたいことを示しています。それが問題に対処するための最良の方法であるかどうか、またそれがどれだけうまくスケーリングされるかはわかりません。追跡する必要があるバージョンのさまざまなパラメーターを含む約 20 のテーブルがあります。
入札には常に価格表の最新バージョンが割り当てられますが、ユーザーは別のバージョンを選択できる必要があります。
価格は経理部門から提供された csv ファイルを使用して、個別ではなく一括で更新されることを言及しておく必要があります。各 csv は、データベースに関する限りではなく、内部管理の観点から、新しい控えめな価格表のバージョンを表します。
同様の考え方が、使用する為替レートや会社が運営する地理的地域など、DB 内の他のテーブルに影響を与えます。
新しいバージョンがリリースされる規則性も予測が難しく、endDate の決定が問題になる可能性があります。