【发布时间】:2012-11-01 21:42:51
【问题描述】:
我们有一个如下图所示的购物车,该设置运行良好,除了一个致命缺陷。如果您下订单,则订单与产品相关联,因此如果我在您购买产品后更新产品,我无法向您展示您想要产品在您购买时的样子(包括价格)。这意味着我们需要版本控制。
我目前的计划是,当创建新产品或变体或编辑现有产品时,在数据库中创建产品或变体的副本。购买时,将订单链接到版本,而不是产品。
这看起来相当简单,除了我可以看到我们唯一不需要版本化的是类别(因为没有人关心它属于什么类别。)。所以我们需要版本:
- 产品
- 变体
- 每个版本的键 -> 值对属性
- 图片
我现在的想法是,
注意: 当一个产品被创建时,一个默认的变体也会被创建,这不能被移除。
-
创建产品时
- 将产品插入产品表中。
- 创建默认变体
- 将产品复制到 products_versions 表中
- 用 product_id 列替换当前 id 列
- 添加 id 列
- 将变体复制到 variant_versions 表中
- 用 variant_id 列替换当前 id 列
- 添加 id 列
- 将 product_id 列替换为 product_version_id 列
-
编辑产品时
- 将产品更新到产品表中。
- 将产品复制到 products_versions 表中
- 用 product_id 列替换当前 id 列
- 添加 id 列
- 将所有产品变体复制到 variant_versions 表中
- 用 variant_id 列替换当前 id 列
- 添加 id 列
- 将 product_id 列替换为 product_version_id 列
- 将所有 variant_image_links 复制到 variant_Image_link_version 表中
- 用 variant_version_id 列替换当前的 variant_id 列
-
添加变体时
- 将变体添加到变体表中。
- 将产品复制到 products_versions 表中
- 用 product_id 列替换当前 id 列
- 添加 id 列
- 将所有产品变体复制到 variant_versions 表中
- 用 variant_id 列替换当前 id 列
- 添加 id 列
- 将 product_id 列替换为 product_version_id 列
-
编辑变体时
- 更新变体表中的变体。
- 将产品复制到 products_versions 表中
- 用 product_id 列替换当前 id 列
- 添加 id 列
- 将所有产品变体复制到 variant_versions 表中
- 用 variant_id 列替换当前 id 列
- 添加 id 列
- 将 product_id 列替换为 product_version_id 列
- 将所有 variant_image_links 复制到 variant_Image_link_version 表中
- 用 variant_version_id 列替换当前的 variant_id 列
所以最终的结构看起来像Full Size
现在这一切看起来都很棒,除了看起来有很多重复的数据,例如如果我们更新产品,我们会复制变体,即使它们在插入后不会更新。此外,这似乎需要大量工作。
有更好的方法吗?
【问题讨论】:
-
你用什么程序来绘制这些图表?我喜欢它的外观。
-
@SoboLAN dbdsgnr.appspot.com
-
+1 获取 dbdsgnr.appspot.com 信息,+1 获取问题。我很惊讶这在“标准数据库模型”一书中没有涉及。如果有,我想知道是哪一个。不记得另一本书是针对不同行业领域的大量已知/所需模型的集合。
-
这本书我指的是:The Data Model Resource Book - Len Silverston。但它不包括通用数据版本控制。
标签: mysql database database-design versioning database-versioning