Вместо 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");
Предимства:Имате ясен дизайн с ясни уникални ключове и външни ключове.
Недостатъци:Имате две таблици, съдържащи подобни данни. Така че имате две различни изрази за вмъкване. И ще ви трябва изявление UNION, ако искате да комбинирате двете таблици (напр. да покажете всички чернови за потребител).