Alih-alih review_autosave_data
anda dapat membuat dua tabel seperti review_insert_drafts
dan review_update_drafts
(satu untuk ulasan baru dan satu untuk pembaruan ulasan).
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`)
);
(Tidak yakin apa name
kolom baik untuk.)
Dalam aplikasi Anda, Anda harus memeriksa apakah pengguna menulis ulasan baru atau memperbarui yang sudah ada.
Untuk ulasan baru yang Anda jalankan:
INSERT INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";
atau
REPLACE INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum");
Untuk pembaruan ulasan yang Anda jalankan:
INSERT INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";
atau
REPLACE INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum");
Keuntungan:Anda memiliki desain yang jelas dengan kunci unik dan kunci asing yang jelas.
Kekurangan:Anda memiliki dua tabel yang berisi data serupa. Jadi, Anda memiliki dua pernyataan penyisipan yang berbeda. Dan Anda akan memerlukan pernyataan UNION jika Anda ingin menggabungkan dua tabel (misalnya, tampilkan semua draf untuk pengguna).