हर 2 सप्ताह में, सिस्टम कंपनियों के लिए चालान जनरेट करेगा।
कंपनी को हर महीने 1 और 16 तारीख को चालान प्राप्त होगा। (यह क्रोन जॉब के माध्यम से हर 2 सप्ताह में चलेगा। यह ऑर्डर टेबल के माध्यम से स्कैन करेगा और फिर 'इनवॉइस' टेबल में जोड़ देगा। क्या कोई विकल्प है?)
orders
तालिका में ग्राहकों के आदेशों की सूची है और यह भी इंगित करता है कि यह किस कंपनी का है ( orders.company_id
)
invoice
तालिका से आदेश की कुल लागत की गणना orders
मेज।
मैं यह पता लगाने की कोशिश कर रहा हूं कि कैसे उचित चालान ट्रैकिंग डिजाइन किया जाए। किसी समय कंपनी को मुझे फीस भेजनी होगी या कुछ समय बाद मैं उन्हें फीस भेज दूंगा ( invoice.amount
)
मुझे निम्नलिखित के साथ चालान ट्रैक करने की आवश्यकता है:
- जब कंपनी ने मुझे राशि भेजी है
- मैंने कब कंपनी को राशि भेजी
- कंपनी से कितनी राशि प्राप्त हुई है
- मैंने कंपनी को कितनी राशि भेजी
- क्या मुझे पूरी राशि प्राप्त हुई (यदि नहीं, तो मुझे Db पर अपडेट करने की क्या आवश्यकता है?)
- चालान स्थिति (चालान भेजा गया, रद्द किया गया, प्राप्त राशि, भेजी गई राशि)
यहाँ डेटाबेस डिज़ाइन है जिसे मैं लेकर आया हूँ:
कंपनी की मेज
mysql> select * from company;
+----+-----------+
| id | name |
+----+-----------+
| 1 | Company A |
| 2 | Company B |
+----+-----------+
ग्राहक मेरी वेबसाइट से एक कंपनी का चयन कर सकते हैं।
आदेश तालिका
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 |
+----+---------+------------+------------+---------------------+-----------+
दो ग्राहकों ने कंपनी बी ( orders.company_id = 2
) से उत्पादों का ऑर्डर दिया है । मुझे पता है कि आदेश क्षेत्र पर्याप्त नहीं हैं, बस आपके लिए सरलीकृत किया गया है।
आदेश_प्रक्रिया तालिका
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 |
+----+----------+------------+--------------+-------+
उत्पादों की सूची जो ग्राहकों ने आदेश दिया है।
चालान तालिका
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 |
+----+------------+------------+---------------------+--------+-----------+
यह वह जगह है जहां मैं इनवॉइस टेबल डिज़ाइन पर काफी अटक गया हूं। मुझे यकीन नहीं है कि यह कैसे किया जाना चाहिए। हर 2 हफ्ते में चालान बनेंगे। परिणाम उदाहरण invoice.amount
से 55.00 है क्योंकि यह orders.company_id = 2
तालिका से गणना की गई है
यदि invoice.amount
-50.00 (माइनस) है, तो इसका मतलब है कि कंपनी को मुझे फीस राशि भेजनी होगी।
यदि invoice.amount
50.00 है, तो इसका मतलब है कि मुझे कंपनी को शुल्क भेजने की आवश्यकता है।
Status_id हो सकता है: (1) चालान भेजा गया, (2) रद्द, (3) पूरा हुआ
क्या मुझे तालिका invoice_id
में फ़ील्ड जोड़ने की आवश्यकता है orders
? orders.invoice_id
जब पंक्ति को 'इनवॉइस' तालिका में डाला गया है तो फ़ील्ड को अपडेट करें ।
इनवॉइस_पेमेंट टेबल
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 |
+----+------------+-----------------+-------------+---------------------+---------------------+
यह वह जगह है जहां मैं लेनदेन को ट्रैक और अपडेट कर सकता हूं .. भुगतान बीएसीएस के माध्यम से किया जाएगा।
क्या यह अच्छा टेबल डिज़ाइन है या मुझे क्या सुधार करने की आवश्यकता है? मुझे किन क्षेत्रों और तालिकाओं को जोड़ना चाहिए?
यदि इनवॉइस उत्पन्न किया गया है और बाद में मुझे परिवर्तन orders_products
या orders
तालिकाओं में बदलाव करने की आवश्यकता है - तो क्या यह invoice.amount
क्षेत्र को पुनर्गणना करना चाहिए ? (मैं PHP / MySQL का उपयोग करूंगा)।
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');
बेझिझक आप यहाँ जवाब देने के लिए तालिकाएँ अद्यतन / जोड़ना चाहते हैं।
धन्यवाद