一张发票可以包含一个或多个订单,如何存档?
发票示例:
OrderID | Order Date | Amount
31 10/02/2011 £1.50
43 12/02/2011 £1.50
74 13/02/2011 £5.00
=======
Total £8.00
如果总计为负(例如:-8.00),则表示客户欠我钱。 没有减号,我付给客户一些钱。
这是我想出的:
订单表
CREATE TABLE IF NOT EXISTS `orders` (
`OrderID` int(11) NOT NULL AUTO_INCREMENT,
`Total` decimal(6,2) NOT NULL,
`OrderDate` datetime NOT NULL,
`Status` int(11) NOT NULL,
`userID` int(11) NOT NULL,
`InvoiceID` int(11) NOT NULL,
PRIMARY KEY (`OrderID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
发票表
CREATE TABLE IF NOT EXISTS `invoice` (
`InvoiceID` int(11) NOT NULL DEFAULT '0',
`InvoiceDate` datetime NOT NULL,
`Amount` decimal(6,2) NOT NULL,
`Status` int(11) NOT NULL,
PRIMARY KEY (`InvoiceID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
invoice.Status(0 个处理中,1 个发票已发送,2 个已取消,3 个已完成) 或者还有什么更好的状态?
付款表
CREATE TABLE IF NOT EXISTS `payment` (
`PaymentID` int(11) NOT NULL AUTO_INCREMENT,
`InvoiceID` int(11) NOT NULL,
`Amount` decimal(6,2) NOT NULL,
`DatePayment` datetime NOT NULL,
`PaymentType` int(11) NOT NULL,
PRIMARY KEY (`PaymentID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
payment.PaymentType =(1:收到客户的付款(欠款),2:发送给客户的付款)
数据库结果:
mysql> select * from orders;
+---------+-------+---------------------+--------+--------+-----------+
| OrderID | Total | OrderDate | Status | userID | InvoiceID |
+---------+-------+---------------------+--------+--------+-----------+
| 1 | 20.00 | 2011-06-18 15:51:51 | 1 | 123 | 1 |
| 2 | 10.00 | 2011-06-19 15:51:57 | 1 | 123 | 1 |
| 3 | 5.00 | 2011-06-20 15:52:00 | 1 | 123 | 1 |
+---------+-------+---------------------+--------+--------+-----------+
mysql> select * from invoice;
+-----------+---------------------+--------+--------+
| InvoiceID | InvoiceDate | Amount | Status |
+-----------+---------------------+--------+--------+
| 1 | 2011-06-30 15:55:21 | 35.00 | 1 |
+-----------+---------------------+--------+--------+
mysql> select * from payment;
+-----------+-----------+--------+---------------------+-------------+
| PaymentID | InvoiceID | Amount | DatePayment | PaymentType |
+-----------+-----------+--------+---------------------+-------------+
| 1 | 1 | 35.00 | 2011-06-29 15:56:16 | 1 |
+-----------+-----------+--------+---------------------+-------------+
我走的路对吗?有什么可以改进/改变或建议的?
谢谢。
最佳答案
好的,你这里有一些严重的问题。订单有多个项目,发票有多个订单,付款可能适用于多个订单和发票。订单可能出现在多张发票上(如果他们不立即付款,这很常见)。
所以你需要的是链接表。您应该从包含订单 ID 和发票 ID 的 ORDERINVOICE 表开始。然后是一个带有 paymentid 和 Order id 的 ORDERPAYMENT 表。
您还需要考虑在订购情况下,您必须记录当时发生的订单详细信息。这意味着虽然您应该有 user_id 链接到当前用户,但您应该记录下订单时的用户姓名、账单地址和送货地址。您稍后将需要此信息来处理订单上的任何问题。此外,您需要确保将订单的详细信息存储在一个名为 ORDERDETAILS 的单独表中,该表存储各个行项目、下订单时的价格和订购项目的名称。出于会计原因,您将需要它。在任何情况下,您都不想依赖与产品表的连接来计算过去订单的价格。这将导致您的财务记录不准确。
关于mysql - 数据库设计反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6427584/