发票可以包含1个或更多订单,如何存档?
发票示例:
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 |
+-----------+-----------+--------+---------------------+-------------+
我是在正确的道路上吗?什么可以改进/改变或建议?
感谢。
答案 0 :(得分:3)
好的,你有一些严重的问题。订单有多个项目,发票有多个订单,付款可能适用于多个订单和发票。订单可能出现在多张发票上(如果他们不立即付款,这是很常见的。)
所以你需要的是链接表。您应该从具有订单ID和发票ID的ORDERINVOICE表开始。然后是一个带有paymentid和订单ID的ORDERPAYMENT表。
您还需要考虑在订购情况下,您必须记录当时发生的订单的详细信息。这意味着虽然您应该将user_id链接到当前用户,但您应该记录订单时的用户名,帐单地址和送货地址。您稍后将需要此信息来处理订单上的任何问题。此外,您需要确保将订单的详细信息存储在名为ORDERDETAILS的单独表中,该表存储单个行项目,订单时的价格以及订购商品的名称。出于会计原因,您将需要这个。在任何情况下,您都不希望依赖于产品表的连接来计算过去订单的价格。这将导致您的财务记录不准确。
答案 1 :(得分:2)
看起来不错。
我要添加的唯一内容是支付表中的交易ID /支票号等细节。这样您就可以将所有付款细节保存在一起。
答案 2 :(得分:0)
对我而言,这也是我原本应该做的。
(我认为付款与订单相关联,但如果您打算将其与发票相关联,这很好)
此致 MN
答案 3 :(得分:0)
在不了解您的要求的情况下,到目前为止一直很好。
请务必将您的发票状态和付款类型解码存储在查找表中,以便可以在数据库中强制执行,并且不必依赖程序员正确编码。