In plaats van review_autosave_data
je kunt twee tabellen maken zoals review_insert_drafts
en review_update_drafts
(een voor nieuwe recensies en een voor recensie-updates).
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`)
);
(Niet zeker wat de name
kolom is goed voor.)
In uw applicatie moet u controleren of de gebruiker een nieuwe recensie schrijft of een bestaande bijwerkt.
Voor nieuwe beoordelingen die u uitvoert:
INSERT INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";
of
REPLACE INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum");
Voor recensie-updates die u uitvoert:
INSERT INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";
of
REPLACE INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum");
Voordelen:Je hebt een duidelijk ontwerp met duidelijke unieke sleutels en buitenlandse sleutels.
Nadelen:je hebt twee tabellen met vergelijkbare gegevens. Je hebt dus twee verschillende insert-statements. En je hebt een UNION-verklaring nodig als je de twee tabellen wilt combineren (bijvoorbeeld alle concepten voor een gebruiker weergeven).