【问题标题】:Ecommerce database design, save product information without affecting historical data电子商务数据库设计,保存产品信息不影响历史数据
【发布时间】:2019-08-24 13:16:10
【问题描述】:

如果不是,那么设计一个电子商务数据库的最佳实用方法是什么,其中客户购买的产品的产品信息在产品信息更新时不应该更新?

为了更好地理解,这里有一个场景:

  1. 商家创建了“产品 A”,价格为 50 美元。
  2. 客户看到产品 A 并购买了它。
  3. 客户访问了交易历史并查看了他最近的购买:产品 A 价格为 50 美元
  4. 一个月后,商家将产品 A 的价格更新为 80 美元。
  5. 客户再次查看了他的交易历史。他与产品 A 的交易应保持在 50 美元,而不是更新后的 80 美元,因为这是他当时支付的价格。

我正在研究的一个解决方案是将整个产品信息作为 PHP 序列化数据保存在“purchases.product_information”中的表格中。

将 PHP 序列化数据存储在列中是不是一个好主意?如果用户想在产品信息(如价格、商品名称等)中搜索文本,性能如何?

还有其他解决方法吗?

谢谢

【问题讨论】:

  • Is it even a good idea to store PHP serialized data in a column? How's performance if a user wanted to search for a text in the product information like price, item name, etc.? 这是折衷方案,表示在 MySql 等中对 JSON 有一些新的支持......这取决于您计划如何使用数据。换句话说,您可以像 Wordpress 那样一直使用元数据来保存数据,但是搜索它就没有那么理想了。

标签: php mysql database database-design relational-database


【解决方案1】:

这是一个渐变维度的案例(https://en.wikipedia.org/wiki/Slowly_changing_dimension

一个简单的解决方案是有一个单独的表 purchase_items 并包含所有可能随时间变化的列(例如:价格、折扣等),并且 purchase 和 purchase_items 表将具有 one_to_many 关系

虽然有更复杂的情况,产品的价格会根据一天中下订单的时间等而即时变化。在这些情况下,价格可能不会针对产品本身存储

这个答案正好解决了这个问题,你可能会觉得这很有帮助 https://dba.stackexchange.com/questions/57992/ecommerce-orders-table-save-prices-or-use-an-audit-history-table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2013-10-27
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多