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

Desain database aturan harga untuk sistem reservasi hotel

Saya sebenarnya telah merancang dan menerapkan sistem Reservasi Hotel dan dapat menawarkan saran berikut berdasarkan pengalaman saya.

Saya akan merekomendasikan opsi desain kedua Anda, menyimpan satu catatan untuk setiap kombinasi Tanggal/Hotel. Alasannya adalah bahwa meskipun akan ada periode di mana Tarif Hotel sama dalam beberapa hari, hal itu lebih mungkin yang, tergantung ketersediaan, akan berubah seiring waktu dan menjadi berbeda (hotel cenderung menaikkan tarif kamar saat ketersediaan menurun).

Juga ada informasi penting lainnya yang perlu disimpan yang khusus untuk hari tertentu:

  1. Anda perlu mengatur ketersediaan hotel, yaitu pada Tanggal x ada y kamar tersedia. Ini hampir pasti akan bervariasi setiap hari.
  2. Beberapa hotel memiliki periode pemadaman di mana hotel tidak tersedia untuk waktu yang singkat (biasanya hari-hari tertentu).
  3. Lead Time - beberapa Hotel hanya mengizinkan kamar untuk dipesan beberapa hari sebelumnya, ini dapat berbeda antara hari Minggu dan Akhir Pekan.
  4. Malam minimum, lagi-lagi data disimpan berdasarkan tanggal individu yang mengatakan jika Anda tiba pada hari ini, Anda harus menginap x jumlah malam (katakanlah selama akhir pekan)

Juga pertimbangkan seseorang yang memesan masa inap selama seminggu, kueri basis data untuk mengembalikan tarif dan ketersediaan untuk setiap hari masa inap itu jauh lebih ringkas jika Anda memiliki catatan harga untuk setiap Tanggal. Anda cukup melakukan kueri di mana Tanggal Tarif Kamar adalah ANTARA Tanggal Kedatangan dan Keberangkatan untuk mengembalikan kumpulan data dengan satu catatan per tanggal menginap.

Saya menyadari dengan pendekatan ini Anda akan menyimpan lebih banyak catatan tetapi dengan tabel yang diindeks dengan baik, kinerjanya akan baik-baik saja dan pengelolaan data akan jauh lebih sederhana. Dilihat dari komentar Anda, Anda hanya berbicara di wilayah 18.000 catatan yang merupakan volume yang cukup kecil (sistem yang saya kerjakan memiliki beberapa juta dan berfungsi dengan baik).

Untuk mengilustrasikan pengelolaan data ekstra jika Anda TIDAK simpan satu catatan per hari, bayangkan sebuah Hotel memiliki tarif 100 USD dan 20 kamar tersedia untuk seluruh bulan Desember:

Anda akan mulai dengan satu catatan:

1-Dec to 31st Dec Rate 100 Availability 20

Kemudian Anda menjual satu kamar pada tanggal 10 Des.

Logika bisnis Anda sekarang harus membuat tiga catatan dari yang di atas:

1-Dec to 9th Dec Rate 100 Availability 20 10-Dec to 10th Dec Rate 100 Availability 19 11-Dec to 31st Dec Rate 100 Availability 20

Kemudian tarif berubah pada tanggal 3 dan 25 Des menjadi 110

Logika bisnis Anda sekarang harus membagi data lagi:

1-Dec to 2-Dec Rate 100 Availability 20 3-Dec to 3-Dec Rate 110 Availability 20 4-Dec to 9-Dec Rate 100 Availability 20 10-Dec to 10-Dec Rate 100 Availability 19 11-Dec to 24-Dec Rate 100 Availability 20 25-Dec to 25-Dec Rate 110 Availability 20 26-Dec to 31-Dec Rate 100 Availability 20

Itu lebih banyak logika bisnis dan lebih banyak overhead daripada menyimpan satu catatan per tanggal.

Saya dapat menjamin Anda bahwa pada saat Anda selesai, sistem Anda akan berakhir dengan satu baris per tanggal, jadi Anda sebaiknya mendesainnya seperti itu dari awal dan mendapatkan manfaat dari manajemen data yang lebih mudah dan kueri basis data yang lebih cepat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menghindari banyak hasil dari sub kueri

  2. mysql menghitung total dari bidang dengan nilai yang dipisahkan koma

  3. Tabel 'performance_schema.session_variables' tidak ada

  4. Menggunakan Hitungan untuk menemukan jumlah kemunculan

  5. Cara Menginstal Database MariaDB di Debian 10