Cứ sau 2 tuần, hệ thống sẽ tạo hóa đơn cho các công ty.
Công ty sẽ nhận được hóa đơn vào ngày 1 và 16 hàng tháng. (Nó sẽ chạy qua Cron Job mỗi 2 tuần. Nó quét qua bảng đơn hàng và sau đó thêm vào bảng 'hóa đơn'. Có cách nào khác không?)
Có danh sách các đơn đặt hàng của khách hàng trong orders
bảng và nó cũng cho biết công ty đó thuộc về ( orders.company_id
)
Các invoice
bảng tính toán tổng chi phí của các đơn đặt hàng từ orders
bảng.
Tôi đang cố gắng tìm ra cách thiết kế theo dõi hóa đơn hợp lý. Đôi khi công ty sẽ phải gửi cho tôi các khoản phí hoặc đôi khi tôi gửi cho họ các khoản phí ( invoice.amount
)
Tôi cần theo dõi các hóa đơn như sau:
- khi công ty gửi cho tôi số tiền
- khi nào tôi gửi số tiền cho công ty
- bao nhiêu đã nhận được từ công ty
- tôi đã gửi bao nhiêu tiền cho công ty
- Tôi đã nhận được toàn bộ số tiền chưa (nếu không, tôi cần cập nhật gì trên Db?)
- trạng thái hóa đơn (Hóa đơn đã gửi, Đã hủy, Số tiền đã nhận, Số tiền đã gửi)
Đây là thiết kế cơ sở dữ liệu tôi đã đưa ra:
bảng công ty
mysql> select * from company;
+----+-----------+
| id | name |
+----+-----------+
| 1 | Company A |
| 2 | Company B |
+----+-----------+
Khách hàng có thể chọn một công ty từ trang web của tôi.
bảng đơn hàng
mysql> select * from orders;
+----+---------+------------+------------+---------------------+-----------+
| id | user_id | company_id | total_cost | order_date | status_id |
+----+---------+------------+------------+---------------------+-----------+
| 1 | 5 | 2 | 25.00 | 2012-02-03 23:30:24 | 1 |
| 2 | 7 | 2 | 30.00 | 2012-02-13 18:06:12 | 1 |
+----+---------+------------+------------+---------------------+-----------+
hai khách hàng đã đặt hàng các sản phẩm từ Công ty B ( orders.company_id = 2
). Tôi biết các trường đơn hàng là không đủ, chỉ đơn giản hóa cho bạn.
bảng order_products
mysql> select * from orders_products;
+----+----------+------------+--------------+-------+
| id | order_id | product_id | product_name | cost |
+----+----------+------------+--------------+-------+
| 1 | 1 | 34 | Chair | 10.00 |
| 2 | 1 | 25 | TV | 10.00 |
| 3 | 1 | 27 | Desk | 2.50 |
| 4 | 1 | 36 | Laptop | 2.50 |
| 5 | 2 | 75 | PHP Book | 25.00 |
| 6 | 2 | 74 | MySQL Book | 5.00 |
+----+----------+------------+--------------+-------+
Danh sách các sản phẩm những gì khách hàng đã đặt hàng.
bảng hóa đơn
mysql> select * from invoice;
+----+------------+------------+---------------------+--------+-----------+
| id | company_id | invoice_no | invoice_date | amount | status_id |
+----+------------+------------+---------------------+--------+-----------+
| 7 | 2 | 123 | 2012-02-16 23:59:59 | 55.00 | 1 |
+----+------------+------------+---------------------+--------+-----------+
Đây là nơi tôi khá bế tắc trong thiết kế bảng hóa đơn. Tôi không chắc nó nên được thực hiện như thế nào. Hóa đơn sẽ được tạo ra mỗi 2 tuần. Từ ví dụ kết quả invoice.amount
là 55,00 vì nó đã được tính từ orders.company_id = 2
bảng
Nếu invoice.amount
là -50,00 (trừ), điều đó có nghĩa là công ty sẽ cần gửi cho tôi số tiền lệ phí.
Nếu invoice.amount
là 50,00, điều đó có nghĩa là tôi cần gửi cho công ty các khoản phí.
Status_id có thể là: (1) Đã gửi hóa đơn, (2) Đã hủy, (3) Đã hoàn thành
Tôi có cần thêm invoice_id
trường trong orders
bảng không? Cập nhật orders.invoice_id
trường khi hàng đã được chèn vào bảng 'hóa đơn'.
bảng hóa đơn thanh toán
mysql> select * from invoice_payment;
+----+------------+-----------------+-------------+---------------------+---------------------+
| id | invoice_id | amount_received | amount_sent | date_received | date_sent |
+----+------------+-----------------+-------------+---------------------+---------------------+
| 1 | 1 | 0.00 | 55.00 | 0000-00-00 00:00:00 | 2012-02-18 22:20:53 |
+----+------------+-----------------+-------------+---------------------+---------------------+
Đây là nơi tôi có thể theo dõi và cập nhật giao dịch .. thanh toán sẽ được thực hiện qua BACS.
Đây có phải là thiết kế bảng tốt hay tôi cần cải thiện điều gì? Những lĩnh vực và bảng tôi nên thêm?
Nếu hóa đơn đã được tạo và sau này tôi cần thực hiện các thay đổi trong orders_products
hoặc orders
bảng - nó có nên tính toán lại invoice.amount
trường không? (Tôi sẽ sử dụng PHP / MySQL).
Kết xuất SQL :
CREATE TABLE IF NOT EXISTS `company` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `company` (`id`, `name`) VALUES
(1, 'Company A'),
(2, 'Company B');
CREATE TABLE IF NOT EXISTS `invoice` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`company_id` int(11) NOT NULL,
`invoice_no` int(11) NOT NULL,
`invoice_date` datetime NOT NULL,
`amount` decimal(6,2) NOT NULL,
`status_id` tinyint(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
INSERT INTO `invoice` (`id`, `company_id`, `invoice_no`, `invoice_date`, `amount`, `status_id`) VALUES
(7, 2, 123, '2012-02-16 23:59:59', '55.00', 1);
CREATE TABLE IF NOT EXISTS `invoice_payment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`invoice_id` int(11) NOT NULL,
`amount_received` decimal(6,2) NOT NULL,
`amount_sent` decimal(6,2) NOT NULL,
`date_received` datetime NOT NULL,
`date_sent` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
INSERT INTO `invoice_payment` (`id`, `invoice_id`, `amount_received`, `amount_sent`, `date_received`, `date_sent`) VALUES
(1, 1, '0.00', '55.00', '0000-00-00 00:00:00', '2012-02-18 22:20:53');
CREATE TABLE IF NOT EXISTS `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`company_id` int(11) NOT NULL,
`total_cost` decimal(6,2) NOT NULL,
`order_date` datetime NOT NULL,
`status_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `orders` (`id`, `user_id`, `company_id`, `total_cost`, `order_date`, `status_id`) VALUES
(1, 5, 2, '25.00', '2012-02-03 23:30:24', 1),
(2, 7, 2, '30.00', '2012-02-13 18:06:12', 1);
CREATE TABLE IF NOT EXISTS `orders_products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL,
`product_id` int(11) NOT NULL,
`product_name` varchar(100) NOT NULL,
`cost` decimal(6,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
INSERT INTO `orders_products` (`id`, `order_id`, `product_id`, `product_name`, `cost`) VALUES
(1, 1, 34, 'Chair', '10.00'),
(2, 1, 25, 'TV', '10.00'),
(3, 1, 27, 'Desk', '2.50'),
(4, 1, 36, 'Laptop', '2.50'),
(5, 2, 75, 'PHP Book', '25.00'),
(6, 2, 74, 'MySQL Book', '5.00');
Hãy thoải mái bạn muốn cập nhật / thêm bảng để trả lời ở đây.
Cảm ơn