Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库设计反馈_Mysql_Sql_Database_Database Design - Fatal编程技术网

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
)。这取决于成本