Jak zarządzać dostępnością pokoi na podstawie dni lub miesięcy zajętości

Zajmuję się tworzeniem aplikacji Rails 3 (z MySQL jako RDMS), aby zarządzać dostępnością / zajętością w niektórych pokojach (jest to aplikacja podobna do hotelu). jeden pokój można wynająć na:

Kilka miesięcy (na przykład 6 miesięcy)Niektóre dni / tygodnie / weekend

Jest oczywiste, że aplikacja musi być wyświetlana dla każdego pokoju w określonym terminie, jeśli jest dostępna lub nie, i który użytkownik wynajmuje; po drugiej stronie jeden użytkownik może przeszukiwać jedno pomieszczenie dla danego zakresu dat. Zakres dat może być ustaloną datą lub kilkumiesięcznym zakresem (na przykład od września do marca) i wiem, że jest to coś niezwiązanego z deisgnem DataBase, ale muszę o tym pamiętać.

Aby ten system działał w efektywny sposób, pomyślałem, aby utworzyć tabelę YEAR złożoną poprzez odniesienie do Pokoju i tablicy (reprezentującej 1 rok) 365 elementów, gdy każdy element może mieć wartość 0 lub 1, gdy 0 oznacza dostępną i 1 oznacza wynajęty.

Przyjmując to rozwiązanie, będę musiał zmierzyć się z pewnymi problemami:

Zwróć bardzo szybkie wyniki, gdy użytkownik szuka pokoju w ciągu kilku miesięcy.Zarządzanie „cross-years'ranges” (na przykład od 20 grudnia 2012 r. Do 13 stycznia 2013 r.)Lata przestępne

i ostatnia rzecz, mam zamiar uniknąć procedury SQL lub procesów w środku nocy (jeśli to możliwe)

Jestem pewien, że istnieją lepsze sposoby projektowania tego problemu w SQL ... Czy niektórzy z was mogą mi pomóc? lub dając mi podpowiedź?