【问题标题】:What do I need to keep in a database to record the history of orders?我需要在数据库中保存什么来记录订单历史?
【发布时间】:2010-01-03 12:37:53
【问题描述】:

我想保留客户的订单历史记录。

我正在考虑保留产品名称、订购产品数量、产品价格、订购日期、名称、地址等

表格可以是 order_history 并且会有 id, date, cutomer_id,..的字段。

然后我想到了一个关于产品名称和数量的问题。

我应该如何将它们保存在数据库中?

客户可以订购多个不同编号的产品。

我是否应该将它保存在数组中的一个字段中,例如 {product1, 2, product2, 1, product3,2 等}

或者我应该单独保留姓名和号码?

或者其他方式?

常见的做法是什么?

您能推荐一个合适的数据库结构吗?

【问题讨论】:

  • 请记住,您需要记录下订单(或开票,或...)时的产品和价格信息,这意味着您不能使用简单的产品表,因为一个产品在一段时间内可能有多个价格。基本规范化指示不使用建议的“数组中的字段”;这些规则不会改变,因为数据库存储了历史数据。

标签: mysql database


【解决方案1】:

我会看看类似这样的表结构

TABLE Products
    ProductID INT
    ProductName VARCHAR(50)
    ProductDescription VARCHAR(100)
    ProductCategory INT

TABLE ProductCategories
    ProductCategoryID INT
    ProductCategory VARCHAR(50)
    ProductCategoryDescription VARCHAR(100)

TABLE Customers
    CustomerID INT
    CustomerLastname VARCHAR(50)
    CustomerFirstName VARCHAR(50)
    PhoneNumber VARCHAR(20)
    FaxNumber VARCHAR(20)
    CellNumber VARCHAR(20)
    Email VARCHAR(50)

TABLE Orders
    OrderID INT
    CustomerID INT
    OrderDate DATETIME
    DeliveryDate DATETIME
    PaymentDate DATETIME

TABLE OrderItems
    OrderItemID INT
    OrderID INT
    ProductID INT
    Quantity FLOAT
    Price FLOAT
    Discount FLOAT

您可以向此处给出的结构添加更多详细信息,也可以向 Products 表添加更多详细信息,以提供具体的描述或项目编号。 ProductCategories 或任何其他表也是如此。

【讨论】:

  • @shin 如果有疑问,想想“什么会使我的数据库标准化”?
  • 我同意 asstander 的观点,但也建议您在 Orders 和 OrderItems 表中添加一些冗余数据。事务历史必须在数据库其他部分的更改之外持续存在。用户电子邮件地址和信用卡等内容会不时发生变化,产品名称及其价格也是如此。有时这两个都可以删除,从而在您的事务表中留下孤立(或更糟,丢失)数据。因为您正在处理金钱,而历史对这类事情很重要,所以您应该存储有关交易中发生的所有事情的冗余数据。
  • 是的,这是正确的,可以做的是创建一个表,其中包含 已关闭/全额支付静态 订单,其中包含如上所述的静态数据。这样,一旦开具发票/付款,就不应更改订单。
【解决方案2】:

您绝对应该将产品名称放在订单项表中 - 因为随着时间的推移,产品会被重命名并最终被删除 - 您会想要记住它们在订购时的名称。任何其他类似的详细信息(制造商代码、SKU 等)也需要保留在其中(当然还有您出售的价格)

【讨论】:

    【解决方案3】:

    您的数据库结构可能是这样的:

    customer: id,and all information about the customer.
    
    product: id,barcode,and all information about the product
    
    factor: id,customer_id,date,delivery-date,ship-date,payment_type...
    
    orders: factor_id,product_id,count,description
    

    记住:在设计数​​据库时,必须在表中重复没有字符串,在这种情况下,您必须创建一个新表并将字符串存储在该表中,然后在表中使用新表 id 而不是字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多