database - Grails数据库表版本控制

标签 database grails version-control

我刚刚开始了一个新的数据库项目,以对客户投标报价进行定价:

数据库中的某些表将包含定期更新的信息,例如定价表。

现在,新的投标应始终使用数据库中的最新信息,但是,除非投标人另行决定,否则现有的投标应继续使用开始时使用的数据。

投标事项在某种程度上得到了简化,因为在任何情况下投标都不会在各个版本之间使用价格,因此,即使产品惯用了,并且可以在定价表的旧版本中使用,但新项目将无法使用。

为了实现这一点,我打算包括一个版本列,也许还包括一个链接的版本控制表。我认为这足够了。

但是,我觉得这必须是数据库设计的共同要求,因此必须有现有的“最佳实践”和技术来实现这一目标,因此我宁愿在现有经验的基础上进行创新,而不是不善于重新发明轮子。

关于如何解决此问题的任何建议?另外,我正在使用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/

相关文章:

visual-studio-2008 - 为 Visual Studio 2008 推荐的 TDD/Agile/Source Control 插件

ruby-on-rails - 推送到 Heroku 时应用程序的位置

mysql - 通过 MySQL 中的列纠正了不正确的时区结果?

java - 为什么会出现这个异常呢? Lucene异常

Java - 加载 JTabbedPane 一个又一个选项卡

html - 如何将URL检索到GSP中

mysql - 如何使用 Grails 2.0 获得可为空的约束?

grails - 相对于另一个域类属性对域类属性进行排序

node.js - 在哪里建立 Mongoose 连接/任何数据库连接

Flash 源代码控制 - 最佳实践