इसके बजाय review_autosave_data
आप review_insert_drafts
. जैसे दो टेबल बना सकते हैं और review_update_drafts
(एक नई समीक्षाओं के लिए और एक समीक्षा अपडेट के लिए)।
CREATE TABLE `review_insert_drafts` (
`product_id` int(11) unsigned NOT NULL,
`user_id` int(11) unsigned NOT NULL,
`review` blob,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`product_id`, `user_id`),
CONSTRAINT FOREIGN KEY (`product_id`) REFERENCES `products` (`id`),
CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
);
CREATE TABLE `review_update_drafts` (
`review_id` int(11) unsigned NOT NULL,
`review` blob,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`review_id`),
CONSTRAINT FOREIGN KEY (`review_id`) REFERENCES `reviews` (`id`)
);
(सुनिश्चित नहीं है कि name
क्या है कॉलम के लिए अच्छा है।)
अपने आवेदन में आपको यह जांचना होगा कि उपयोगकर्ता एक नई समीक्षा लिख रहा है या किसी मौजूदा को अपडेट कर रहा है।
आपके द्वारा चलाई जाने वाली नई समीक्षाओं के लिए:
INSERT INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";
या
REPLACE INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum");
आपके द्वारा चलाए जा रहे समीक्षा अपडेट के लिए:
INSERT INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";
या
REPLACE INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum");
लाभ:आपके पास स्पष्ट अद्वितीय कुंजियों और विदेशी कुंजियों के साथ एक स्पष्ट डिज़ाइन है।
नुकसान:आपके पास समान डेटा वाली दो तालिकाएँ हैं। तो आपके पास दो अलग-अलग सम्मिलित कथन हैं। और यदि आप दो तालिकाओं को जोड़ना चाहते हैं तो आपको एक यूनियन स्टेटमेंट की आवश्यकता होगी (उदाहरण के लिए उपयोगकर्ता के लिए सभी ड्राफ्ट दिखाएं)।