Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Tindak lanjut:bagaimana memodelkan diskon pada item dalam database?

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:

  1. Perbarui catatan yang ada dengan stempel waktu 2038, ubah endDateTimeStamp bidang untuk mencerminkan awal penjualan
  2. Sisipkan catatan baru untuk menentukan penjualan
  3. 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah timestampdiff() di MySQL setara dengan dateiff() di SQL Server?

  2. MYSQL PHP Tidak Ada Basis Data yang Dipilih - Tidak Dapat Menemukan Kesalahan

  3. Mengapa saya masih membutuhkan Konektor MySQL diinstal pada komputer meskipun memiliki paket NuGet yang tepat?

  4. Mana yang lebih cepat:subquery yang berkorelasi atau bergabung?

  5. Doctrine 2 DQL MySQL setara dengan ROUND()?