Desain ProductPricing
tabel memungkinkan kita untuk tidak perlu menghapus data harga lama (terkadang manajemen menginginkan laporan berdasarkan data tersebut). Dengan apa yang telah Anda jelaskan di atas, Anda akan memulai seperti ini (saya mengubah tanggal mulai agar mudah untuk menentukan bahwa ya, ini adalah harga asli saat sistem mulai berlaku):
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Jan 1, 2038, 00:00:00 | 10$ | 10$
Sekarang katakanlah Anda memberikan harga diskon untuk apel Anda, dan Anda ingin proaktif dan menyiapkan sistem saat penjualan selesai:
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Dec 20, 2011, 00:00:00 | 10$ | 10$
1 | Dec 20, 2011, 00:00:01 | Dec 26, 2011, 00:00:00 | 7.5$ | 10$
1 | Dec 26, 2011, 00:00:01 | Jan 1, 2038, 00:00:00 | 10$ | 10$
Apa yang kami lakukan di sini adalah:
- Perbarui catatan yang ada dengan stempel waktu 2038, ubah
endDateTimeStamp
bidang untuk mencerminkan awal penjualan - Sisipkan catatan baru untuk menentukan penjualan
- Masukkan rekor baru lainnya untuk mencerminkan harga normal lagi
Tanpa stempel waktu yang tumpang tindih, Anda dijamin mendapatkan satu catatan saat Anda menanyakan database untuk harga Anda. Jadi,
SELECT p.Name, pp.price, pp.original_price
FROM Product p
INNER JOIN ProductPricing pp ON pp.productId = p.productId
WHERE NOW() BETWEEN pp.startDateTimeStamp AND pp.endDateTimeStamp
akan memberi Anda daftar produk dengan harga saat ini.