我刚刚开始了一个新的数据库项目,以对客户投标报价进行定价:
数据库中的某些表将包含定期更新的信息,例如定价表。
现在,新的投标应始终使用数据库中的最新信息,但是,除非投标人另行决定,否则现有的投标应继续使用开始时使用的数据。
投标事项在某种程度上得到了简化,因为在任何情况下投标都不会在各个版本之间使用价格,因此,即使产品惯用了,并且可以在定价表的旧版本中使用,但新项目将无法使用。
为了实现这一点,我打算包括一个版本列,也许还包括一个链接的版本控制表。我认为这足够了。
但是,我觉得这必须是数据库设计的共同要求,因此必须有现有的“最佳实践”和技术来实现这一目标,因此我宁愿在现有经验的基础上进行创新,而不是不善于重新发明轮子。
关于如何解决此问题的任何建议?另外,我正在使用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不仅代表数据库,而且还代表内部管理的 Angular ,代表一个新的谨慎价格表版本。
类似的原则也会影响数据库中的其他表格,例如使用汇率或公司运营所在的地理区域。
很难预测新版本的发布规律,这可能会使确定endDate成为问题。
最佳答案
这个目标没有特殊的Grails支持,这就是4th normal form。在您的情况下,它将是价格实体的 header 表和时间上具有限制的值的子表:
class Price {
static hasMany = [ values: PriceValue ]
}
class PriceValue {
Number amount
Date validFrom
Date validTo
static belongsTo = [ price: Price ]
}
关于database - Grails数据库表版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12423935/