基本的mysql版本控制?

Hai*_*ood 7 mysql database versioning database-design database-versioning

我们有一个购物车,如下图所示,设置运行良好,除了一个致命的缺陷.如果您下订单该订单与产品相关联,那么如果我在您购买产品后更新产品,我就无法向您展示您希望产品在购买时的样子(包括价格).这意味着我们需要版本控制.

当前架构

我目前的计划是,在创建新产品或变体或编辑现有产品或变体时,在数据库中创建产品或变体的副本.购买时,将订单链接到版本,而不是产品.

这似乎相当简单,除了我可以看到的,我们不需要版本的唯一事情是类别(因为没有人关心它的类别).所以我们需要版本:

  • 制品
  • 变种
  • 每个版本的键 - >值对属性
  • 图像

我目前的想法是,

注意: 创建产品时,也会创建默认变体,但无法删除.

  • 创建产品时
    • 将产品插入产品表中.
    • 创建默认变体
    • 将产品复制到products_versions表中
      • 使用product_id列替换当前id列
      • 添加id列
    • 将变体复制到variants_versions表中
      • 用variant_id列替换当前id列
      • 添加id列
      • 将product_id列替换为product_version_id列

  • 编辑产品时
    • 将产品更新到产品表中.
    • 将产品复制到products_versions表中
      • 使用product_id列替换当前id列
      • 添加id列
    • 将所有产品变体复制到variants_versions表中
      • 用variant_id列替换当前id列
      • 添加id列
      • 将product_id列替换为product_version_id列
    • 将所有variant_image_links复制到variant_Image_link_version表中
      • 将当前variant_id列替换为variant_version_id列

  • 添加变体时
    • 将变体添加到变体表中.
    • 将产品复制到products_versions表中
      • 使用product_id列替换当前id列
      • 添加id列
    • 将所有产品变体复制到variants_versions表中
      • 用variant_id列替换当前id列
      • 添加id列
      • 将product_id列替换为product_version_id列

  • 编辑变体时
    • 更新变体表中的变体.
    • 将产品复制到products_versions表中
      • 使用product_id列替换当前id列
      • 添加id列
    • 将所有产品变体复制到variants_versions表中
      • 用variant_id列替换当前id列
      • 添加id列
      • 将product_id列替换为product_version_id列
    • 将所有variant_image_links复制到variant_Image_link_version表中
      • 将当前variant_id列替换为variant_version_id列

所以最终结构看起来像全尺寸

现在这一切看起来都很棒,除非它看起来像是一堆重复数据,例如,如果我们更新产品,我们会复制变体,即使它们插入后也不会更新.此外,这似乎很多工作.

有没有更好的方法呢?

ane*_*oid 5

您可以执行ERP(以及薪资)系统的作用:添加开始和结束日期/时间。所以...

  • 变体和价格会根据共同日期与其产品匹配。
  • 所有查询默认都在当前日期运行,并且每个表之间的联接还需要考虑重叠/相交的日期范围。 parent_start_date <= child_start_date AND parent_end_date >= child_end_date
  • 您最终将为每个价格变化或变体重复行,但是当产品价格变化时,您不需要保持更新记录(如变体ID)。
  • 需要确保使用了有效日期。PS:使用系统的最大日期作为最新/最近记录的结束日期时间。

顺便说一句,同一行的一些相关问题: