Mysql 数据库设计反馈
一张发票可以包含一个或多个订单,如何存档 发票示例:Mysql 数据库设计反馈,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,一张发票可以包含一个或多个订单,如何存档 发票示例: OrderID | Order Date | Amount 31 10/02/2011 £1.50 43 12/02/2011 £1.50 74 13/02/2011 £5.00 =======
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
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 |
+-----------+-----------+--------+---------------------+-------------+
如果总数为负(例如:-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;
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 ;
发票表
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;
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 ;
发票状态(0处理,1发送发票,2取消,3完成)
还有什么更好的地位
付款表
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;
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:发送给客户的付款)
数据库结果:
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
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 |
+-----------+-----------+--------+---------------------+-------------+
我在正确的道路上吗?有什么可以改进/改变或建议
谢谢。我觉得没问题,我也会这么做的 (我认为付款与订单关联,但如果您打算将其与发票关联,则可以) 问候,,
MN在我看来没问题,这也是我应该做的 (我认为付款与订单关联,但如果您打算将其与发票关联,则可以) 问候,,
MN不知道更多关于您的需求,到目前为止还不错
请确保将您的发票状态和付款类型解码存储在查找表中,以便在数据库中强制执行,而不必依赖程序员正确编码。在不了解您的更多需求的情况下,到目前为止一切正常 确保将发票状态和付款类型解码存储在查找表中,以便在数据库中强制执行,而不必依赖程序员正确编码。看起来不错 我只想在付款表中添加一些细节,如交易id/支票编号。这样你就可以把所有的付款细节放在一起。看起来不错
我只想在付款表中添加一些细节,如交易id/支票编号。通过这种方式,您可以将所有付款详细信息保存在一起。好的,这里有一些严重的问题。订单有多个项目,发票有多个订单,付款可能适用于多个订单和发票。订单可能出现在多张发票上(如果他们不立即付款,这是很常见的) 因此,您需要的是链接表。您应该从同时具有订单id和发票id的ORDERINVOICE表开始,然后是具有paymentid和订单id的ORDERPAYMENT表
您还需要考虑,在订购的情况下,您必须记录订单发生时的详细信息。这意味着,虽然您应该有用户id来链接到当前用户,但您应该记录下该用户的姓名、账单地址和发货地址,与订购时一样。您稍后需要这些信息来处理订单上的任何问题。此外,您需要确保将订单的详细信息存储在名为ORDERDETAILS的单独表中,该表存储单独的行项目、订单时的价格和订购的项目名称。出于会计方面的原因,您需要这个。在过去的任何情况下,您都不希望依赖产品表的联接来计算订单的价格。这将导致您的财务记录不准确。
好的,您这里有一些严重的问题。订单有多个项目,发票有多个订单,付款可能适用于多个订单和发票。订单可能出现在多张发票上(如果他们不立即付款,这是很常见的) 因此,您需要的是链接表。您应该从同时具有订单id和发票id的ORDERINVOICE表开始,然后是具有paymentid和订单id的ORDERPAYMENT表您还需要考虑,在订购的情况下,您必须记录订单发生时的详细信息。这意味着,虽然您应该有用户id来链接到当前用户,但您应该记录下该用户的姓名、账单地址和发货地址,与订购时一样。您稍后需要这些信息来处理订单上的任何问题。此外,您需要确保将订单的详细信息存储在名为ORDERDETAILS的单独表中,该表存储单独的行项目、订单时的价格和订购的项目名称。出于会计方面的原因,您需要这个。在过去的任何情况下,您都不希望依赖产品表的联接来计算订单的价格。这将导致您的财务记录不准确。
看起来没问题-我建议在订单
和发票
上都有状态
,这有点令人困惑。如果订单的状态可以独立于发票,那么就可以了。感谢您在原始问题中加入模式。很多人不这么认为。我在这里没有看到它们的定义,所以别忘了索引外键(orders.userID
,orders.InvoiceID
,payment.InvoiceID
)。根据成本的应用方式,orders
上的Total
可能不够。您可能需要成本
和数量
。此外,您可能需要对发票收取额外费用,如运输、搬运等。换句话说,发票金额将是订单总成本*数量+运输+处理。@Blazes发票只能有已完成的订单(例如:order.status=1)。谢谢Wiseguy,下次我会这样做:)看起来没问题-我建议在订单
和发票
上都有状态
,这有点令人困惑。如果订单的状态可以独立于发票,那么就可以了。感谢您在原始问题中加入模式。很多人不这么认为。我在这里没有看到它们的定义,所以别忘了索引外键(orders.userID
,orders.InvoiceID
,payment.InvoiceID
)。这取决于成本