Счет-фактура может содержать 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
Если Total минус (например: -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 Completed) или что может быть лучше?
Оплата Таблица
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 |
+-----------+-----------+--------+---------------------+-------------+
Im I на правильном пути? Что можно улучшить/изменить или предложить?
Спасибо.
Все выглядит нормально - я бы предположил, что наличие 'Status' на обоих' order' и 'invoices' немного запутанно. Если заказы могут иметь статус, не зависящий от счета-фактуры, тогда все будет в порядке. – Blazes
Спасибо за включение схемы в ваш исходный вопрос. Многие люди этого не делают. Я не вижу, чтобы они определялись здесь, поэтому не забудьте указать ваши внешние ключи ('orders.userID',' orders.InvoiceID', 'payment.InvoiceID'). – Wiseguy
В зависимости от того, как применяются затраты, 'Total' на' orders' может оказаться недостаточным. Вы можете потребовать «Стоимость» и «Количество». Кроме того, вам могут потребоваться дополнительные сборы, взимаемые с 'Invoice', например. Доставка и обработка. Другими словами, сумма счета будет равна сумме заказа Стоимость * Количество + Доставка + Обработка. – Blazes