एक बार परिभाषित होने के बाद आप किसी उत्पाद को नहीं हटा सकते हैं, इसलिए उत्पाद में एक स्थिति फ़ील्ड जोड़ें - इस उदाहरण में मैं एक एनम का उपयोग कर रहा हूं, हालांकि यह आसानी से एक आईएनटी या बूल का एक सेट (यानी संग्रहीत) हो सकता है, मैं उपयोग करता हूं पैरामीटर एन्यूमरेशन टेबल्स इसके लिए लेकिन यह एक अलग जवाब है।
सबसे महत्वपूर्ण बात यह सुनिश्चित करना है कि इनवॉइस लाइन में ऑर्डर के बिंदु पर उत्पाद से लिया गया मूल्य निर्धारण (और विवरण) है, ताकि यह सुनिश्चित हो सके कि भविष्य में मूल्य निर्धारण में कोई भी परिवर्तन या उत्पाद का नाम परिवर्तन पहले से मौजूद चालान को प्रभावित नहीं करता है।पी>
दूसरी तकनीक जिसका मैंने उपयोग किया है (काफी सफलतापूर्वक) सुपरसीडिंग की अवधारणा को पेश करना है डेटाबेस में संस्थाएं - ताकि मूल रिकॉर्ड बना रहे और जब भी डेटा बदला जाए तो एक नया संस्करण डाला जाए। ऐसा करने के लिए मैं निम्नलिखित फ़ील्ड जोड़ता हूं:
- वर्तमान आईडी
- अधिक्रमण ById
- पिछला आईडी
यह प्रश्नों को थोड़ा अधिक बोझिल बनाता है - लेकिन विशेष रूप से पतों के लिए यह सुनिश्चित करना आवश्यक है कि चालान स्थिर रहें और पता परिवर्तन चालान में दिखाई न दें - उदा. कंपनी का नाम बदलने से पहले उठाए गए चालान नहीं बदलने चाहिए।
CREATE TABLE `Invoice` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`id`)
);
CREATE TABLE `Invoice Item` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`desc` VARCHAR(200) NOT NULL ,
`value` DECIMAL(11,3) NOT NULL ,
`quantity` DECIMAL(11,3) NOT NULL ,
`total` DECIMAL(11,3) NOT NULL ,
`fk_id_Invoice` INTEGER NOT NULL ,
`fk_id_Product` INTEGER NOT NULL ,
PRIMARY KEY (`id`)
);
CREATE TABLE `Product` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`Price` DECIMAL(11,3) NOT NULL ,
`Name` VARCHAR(200) NOT NULL ,
`Status` ENUM NOT NULL ,
PRIMARY KEY (`id`)
);
ALTER TABLE `Invoice Item` ADD FOREIGN KEY (fk_id_Invoice) REFERENCES `Invoice` (`id`);
ALTER TABLE `Invoice Item` ADD FOREIGN KEY (fk_id_Product) REFERENCES `Product` (`id`);