我们有一个如下图所示的购物车,该设置运行良好,除了一个致命缺陷。如果您下订单,则订单与产品相关联,因此如果我在您购买产品后更新产品,我无法向您展示您想要产品在您购买时的样子(包括价格)。这意味着我们需要版本控制。
我目前的计划是,当创建新产品或变体或编辑现有产品时,在数据库中创建产品或变体的副本。购买时,将订单链接到版本,而不是产品。
这看起来相当简单,除了我可以看到我们唯一不需要版本化的是类别(因为没有人关心它属于什么类别。)。所以我们需要版本:
- 产品
- 变体
- 每个版本的键 -> 值对属性
- 图片
我目前的想法是,
注意: 当创建产品时,也会创建默认变体,这不能被删除。
- 创建产品时
- 将产品插入产品表中。
- 创建默认变体
- 将产品复制到 products_versions 表中
- 用 product_id 列替换当前 id 列
- 添加标识列
- 将变体复制到 variables_versions 表中
- 用 variant_id 列替换当前 id 列
- 添加标识列
- 将 product_id 列替换为 product_version_id 列
- 编辑产品时
- 将产品更新到产品表中。
- 将产品复制到 products_versions 表中
- 用 product_id 列替换当前 id 列
- 添加标识列
- 将所有产品变体复制到 variables_versions 表中
- 用 variant_id 列替换当前 id 列
- 添加标识列
- 将 product_id 列替换为 product_version_id 列
- 将所有 variant_image_links 复制到 variant_Image_link_version 表中
- 将当前的 variant_id 列替换为 variant_version_id 列
- 添加变体时
- 将变体添加到变体表中。
- 将产品复制到 products_versions 表中
- 用 product_id 列替换当前 id 列
- 添加标识列
- 将所有产品变体复制到 variables_versions 表中
- 用 variant_id 列替换当前 id 列
- 添加标识列
- 将 product_id 列替换为 product_version_id 列
- 编辑变体时
- 更新变体表中的变体。
- 将产品复制到 products_versions 表中
- 用 product_id 列替换当前 id 列
- 添加标识列
- 将所有产品变体复制到 variables_versions 表中
- 用 variant_id 列替换当前 id 列
- 添加标识列
- 将 product_id 列替换为 product_version_id 列
- 将所有 variant_image_links 复制到 variant_Image_link_version 表中
- 将当前的 variant_id 列替换为 variant_version_id 列
所以最终的结构看起来像Full Size
现在这一切看起来都很棒,除了看起来有很多重复的数据,例如,如果我们更新产品,我们会复制变体,即使它们在插入后不会更新。此外,这似乎需要做很多工作。
有没有更好的方法来做到这一点?