【问题标题】:Store model relationships at a moment in time及时存储模型关系
【发布时间】:2011-03-13 22:12:23
【问题描述】:

我正在开发一个应用程序,允许人们请求为特定工作生成保修。他们提供诸如使用的产品等信息...(他们的一些选择是从系统中已有的项目列表中提供的。然后我们根据这些选择为他们生成保修。

我正在为将批准的保修作为那个时刻的快照的概念而苦苦挣扎,因为它依赖于可能随时间变化的相关记录。

我能想到的最简单的方法不是将关系存储到源表(例如 product_id),而是将产品写成字符串。这似乎有点乱。另一种方法是不允许从产品表中删除/修改产品,除非没有附加任何保证。也许实现一个指向同一产品的编辑版本的“replaced_with”列?我以前在购物车中做过这个,效果很好。我只是有很多关系要处理,我想知道是否有我没有想到的方法?

【问题讨论】:

    标签: ruby ruby-on-rails-3 model relational-database foreign-key-relationship


    【解决方案1】:

    怎么样:

    1. 添加一个“产品停产”表,该表是 1:0 保修。只有列是保修 ID。
    2. 在“历史产品表”中添加:

      与产品表相同的列

      填充日期/时间的附加时间戳字段。

      产品id/时间戳的主键

      产品 id 的索引

    3. 删除/修改触发器/过程:

      选择产品的所有保修。

      如果有任何保修,则将产品详细信息复制到“历史产品表”,添加主键的第二部分。

      对于找到的每个保修,在“产品停产”表中插入一条记录。

    这是基于您可能希望处理已停产商品的保修不同于有效产品的保修。

    【讨论】:

    • 这不是一个坏主意。我想另一种选择就是使用一个允许软删除/取代的插件。只是想知道是否有我可能没有想到的替代策略:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2021-11-12
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多