Có thể là quá mức cần thiết cho ứng dụng của bạn - nhưng:
Một cách tương đối đơn giản để cải thiện các tìm kiếm của bạn với chi phí làm cho quá trình 'ghi' trở nên phức tạp hơn, đó là thay đổi bảng Đặt chỗ để biến nó thành bảng 'Tình trạng sẵn có'.
Thêm cột boolean để cho biết vị trí trống hoặc đã được đặt trước (hoặc tốt hơn là vẫn nhập id của khách hàng đã đặt nó và sử dụng 0 nếu vị trí trống).
Bắt đầu với một vị trí miễn phí duy nhất, ngày 1 tháng 1 năm 2009 -> ngày 31 tháng 12 năm 20 ??
Khi bạn nhận được một lượt đặt trước, hãy chia vùng miễn phí thành 3 (hai lần chèn và một lần cập nhật), vùng đã đặt và hai vùng khả dụng.
Hãy tiếp tục làm điều đó và khi khung thời gian trở nên phân mảnh hơn, quá trình đặt phòng sẽ bao gồm một trong những điều sau:
- Chỉ định toàn bộ 'vị trí khả dụng' cho ai đó (một bản cập nhật)
- Tách một 'vị trí khả dụng' thành hai (một bản cập nhật và một phần chèn)
- Chia một vị trí thành 3 (như trên) nếu ai đó đặt phần giữa ra khỏi một vị trí có sẵn.
Điều đó không quá phức tạp để quản lý và quá trình tìm kiếm trở thành một truy vấn đơn giản:tìm bất kỳ vị trí nào trong khung thời gian bắt buộc có sẵn (đã đặt trước =false hoặc customerid =0, tùy theo cách bạn thực hiện) trong đó enddate - startdate> =the number trong số ngày bạn muốn.
Nó tăng gấp đôi kích thước của bảng đặt chỗ / tình trạng còn trống và làm cho việc đặt chỗ trở nên ít đơn giản hơn, nhưng điều đáng bàn là quá trình tìm kiếm trở nên dễ dàng như vậy.