প্রতি 2 সপ্তাহে, সিস্টেমটি সংস্থাগুলির জন্য চালান তৈরি করবে।
সংস্থাটি প্রতি মাসে 1 ম এবং 16 তারিখে একটি চালান পাবেন। (এটি প্রতি 2 সপ্তাহে ক্রোন জবের মাধ্যমে চলবে It
orders
সারণীতে গ্রাহকের অর্ডারগুলির তালিকা রয়েছে এবং এটি কোন সংস্থার ( orders.company_id
) এর অন্তর্গত তাও নির্দেশ করে
invoice
টেবিল থেকে আদেশ মোট খরচ নিরূপণ orders
টেবিল।
আমি কীভাবে যুক্তিসঙ্গত চালান ট্র্যাকিং ডিজাইন করতে পারি তা বোঝার চেষ্টা করছি। কোনও সময় সংস্থাটি আমাকে ফিগুলি পাঠাতে হবে বা কোনও সময় আমি তাদের ফি পাঠাতে হবে ( invoice.amount
)
আমাকে নিম্নলিখিতগুলি সহ চালানগুলি ট্র্যাক করতে হবে:
- যখন সংস্থাটি আমাকে পরিমাণ পাঠিয়েছে
- আমি কখন কোম্পানিকে অর্থ প্রেরণ করেছি?
- সংস্থার কাছ থেকে কত পরিমাণ অর্থ প্রাপ্ত হয়েছে
- আমি কত টাকা কোম্পানিকে পাঠিয়েছি
- আমি কি পুরো পরিমাণ পেয়েছি (যদি না হয় তবে ডিবিতে আমার কী আপডেট করতে হবে?)
- চালানের স্থিতি (চালান পাঠানো, বাতিল, প্রাপ্ত পরিমাণ, প্রেরিত পরিমাণ)
আমি যে ডাটাবেস ডিজাইনটি নিয়ে এসেছি তা এখানে:
সংস্থার টেবিল
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 হয় তবে এর অর্থ আমার কাছে সংস্থাটি ফি পাঠানো দরকার।
স্ট্যাটাস_আইডিটি হতে পারে: (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
ক্ষেত্রটি পুনরায় গণনা করা উচিত ? (আমি পিএইচপি / মাইএসকিউএল ব্যবহার করব)।
এসকিউএল ডাম্প :
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');
এখানে উত্তরের জন্য আপনি সারণিগুলি আপডেট / আপডেট করতে চান নিখরচায়।
ধন্যবাদ