Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdowanie wolnych miejsc w systemie rezerwacji

Prawdopodobnie przesada dla twojej aplikacji - ale:

Stosunkowo prostym sposobem na ulepszenie wyszukiwań kosztem skomplikowania procesu „zapisu” jest zmiana tabeli rezerwacji na tabelę „Dostępność”.

Dodaj kolumnę logiczną, aby wskazać, czy slot jest wolny, czy zarezerwowany (lub jeszcze lepiej wpisz identyfikator klienta, który go zarezerwował, i użyj 0, jeśli slot jest wolny).

Zacznij od jednego darmowego slotu, 1 stycznia 2009 -> 31 grudnia 20??

Kiedy otrzymasz rezerwację, podziel wolne miejsce na 3 (dwie wstawki i jedna aktualizacja), zarezerwowane miejsce i dwa dostępne miejsca.

Rób to dalej, a gdy ramy czasowe stają się coraz bardziej rozdrobnione, proces rezerwacji będzie składał się z jednego z następujących elementów:

  • Przypisywanie komuś całego „dostępnego miejsca” (jedna aktualizacja)
  • Podział „dostępnego gniazda” na dwa (jedna aktualizacja i jedna wstawka)
  • Podział slotu na 3 (jak powyżej), jeśli ktoś zarezerwuje środkową sekcję z dostępnego slotu.

Zarządzanie tym nie jest niezwykle skomplikowane, a proces wyszukiwania staje się prostym zapytaniem:znajdowanie dowolnych dostępnych przedziałów czasowych w wymaganym przedziale czasowym (booked=false lub customerid=0, w zależności od tego, w którą stronę się wybierasz), gdzie data końcowa - data początkowa>=liczba dni, które chcesz.

Podwaja rozmiar tabeli rezerwacji/dostępności i sprawia, że ​​rezerwacje są mniej proste, ale kompromis polega na tym, że proces wyszukiwania jest tak prosty, jak to tylko możliwe.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Awaria bazy danych w źródłach danych Jboss

  2. Ponowna instalacja Wamp Server bez wymiany istniejącej bazy danych mysql

  3. nie można wyświetlić wyników zapytania w widoku codeigniter

  4. wstawiaj dane z jednej tabeli do drugiej w mysql

  5. mySQL:podzapytanie do tablicy?