3

人们在网上商店买东西。

我接受他们的订单并将它们保存到数据库中。对于每个订购的物品,我需要数量和有关该物品的信息。至少,我需要保存每件商品的当前价格和名称,但我真的更愿意保存所有内容。

问题来了……将每个订购商品的所有信息保留在购买时的最佳方式是什么?

  1. 复制到与产品表具有相同列的单独表中
  2. 在同一个表中制作产品的副本,标记为不可编辑、不可查看的副本
  3. 在实际更改“实时”产品信息之前,某种形式的写入模式复制可以节省一些空间?
  4. ???

为简单起见,我们假设所有产品信息都保存在一个表中。

4

4 回答 4

8

如果您商店中的产品要经常更改,那么听起来您需要的是产品版本历史记录。

基本上,您应该尝试识别将频繁更改的商店商品的所有属性/字段,并将它们放入单独的product_properties(或其他)表中,并带有这些属性的特定版本的时间戳。也许您的所有属性都会一直在变化,在这种情况下,您可能只需要一张桌子就可以逃脱。无论如何,您可以假设最新的时间戳是产品的最新版本。

当店主更新产品时,您创建一个product_properties包含所有更改属性的新记录,并更新主产品表记录以指向该新记录(或者只是在显示时提取最新的时间戳)。

当有人购买时,您在购买表中记录产品 id 和产品的历史/版本 id。

使用这种类型的历史记录设置,您已经对产品数据进行了规范化,因此它不会与每个购买记录一起反复存储,您仍然可以获得每次购买的具体详细信息。

于 2009-06-30T23:46:09.733 回答
3

将“购买时信息”存储为仅链接到 sku 是一个好主意 --- 但实际上复制了产品表的所有信息(包括定价、描述、sku 等)。如果将来这些产品描述和价格发生变化,您的订单不会中断。

我通常通过产品 ID 链接产品,然后将所有产品数据复制到订单详细信息中。

同样,您将希望在 Accounts <--> Orders 之间执行相同的操作。将订单链接到帐户 ID,但存储所有实际的客户信息(姓名、地址等),以便以后如果更改等不会引起争议。

您不必担心它设置为哪个版本的 sku - 无论当时是什么,它是什么,这就是收费的。这样,客户过去的所有历史记录都将保持有效。

如果您想要另一个层,您可能希望对帐户和产品表实施跟踪更改,以便您知道什么时候发生了更改。

以上是我在 SAP B1 等系统中看到的内容,设计模式很有意义。为了存储一些额外的信息,您可以摆脱其他地方的复杂性。

于 2009-06-30T23:47:01.230 回答
0

通常,电子商务商店具有以下表格:

accounts
products
order
orderdetails

这通常还有很多。但这是基础。

Account = the user shopping in the store
Product = the product description, price, etc.
Order = the high level order details such as purchase date, shipping/billing address
OrderDetails = the low level order details such as price at time of purchase, quantity, etc.

查看 DashCommerce 等开源购物车,了解如何设置有效的购物车系统。我喜欢这个特别的,因为它实现了许多必需的和更复杂的电子商务!

于 2009-06-30T23:37:35.760 回答
0

Jas Panesar 的 SKU 想法非常好。但是,如果您正在寻找一种更简单的方法,您可以将信息存储在一个数组中,对其进行序列化,然后将序列化结果存储在数据库中的单个字段中。

虽然这不如解决方案强大,但它确实使您能够快速轻松地获取信息,而无需重新设计整个数据库结构。

于 2009-06-30T23:55:49.137 回答