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:
- Anda perlu mengatur ketersediaan hotel, yaitu pada Tanggal x ada y kamar tersedia. Ini hampir pasti akan bervariasi setiap hari.
- Beberapa hotel memiliki periode pemadaman di mana hotel tidak tersedia untuk waktu yang singkat (biasanya hari-hari tertentu).
- Lead Time - beberapa Hotel hanya mengizinkan kamar untuk dipesan beberapa hari sebelumnya, ini dapat berbeda antara hari Minggu dan Akhir Pekan.
- 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.