我需要在数据库中保存以记录订单的历史记录?

shi*_*hin 0 mysql database

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

我想保留产品名称,订购产品数量,产品价格,订单日期,名称,地址等

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

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

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

客户可以订购多个具有不同编号的产品.

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

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

还是其他任何方式?

常见的做法是什么?

你能建议一个合适的数据库结构吗?

Adr*_*der 8

我会看一下像这样的表格结构

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
Run Code Online (Sandbox Code Playgroud)

您可以在此处给出的结构中添加更多详细信息,也可以在Products表中添加更多详细信息,以提供特定说明或项目编号.这同样适用于ProductCategories或任何其他表的.

  • 我同意旁观者,但也建议您在Orders和OrderItems表中添加一些冗余数据.事务历史记录必须超出数据库其他部分的更改.用户电子邮件地址和信用卡等信息会不时发生变化,产品名称和价格也会不断变化.有时这两个都可以删除,在事务表中留下孤立(或更糟,缺少)数据.因为你正在处理金钱,历史对于这类事情很重要,你应该存储关于交易发生的所有事情的冗余数据. (3认同)
  • 是的,这是正确的,可以做的是创建一个包含*静态*订单的表,一旦它**关闭/完全支付**包含上述静态数据。这样订单一旦开具发票/付款就不应更改。 (2认同)