Datenbankplanung Hotelreservierungssystem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbankplanung Hotelreservierungssystem

    Hallo,

    ich bin gerade dabei, ein Hotelreservierungssystem zu planen.
    Der Auftraggeber erhält von verschiedenen Hotels Zimmer "zur Verfügung", die er in das System einpflegt.

    Nun schaut meine Datenbankplanung bis jetzt so aus:

    .....

    Tabelle Zimmer:
    id
    hotel_id
    preis
    etc...

    Tabelle "ZimmerTag":
    id
    zimmer_id
    datum
    gebucht

    Sprich für jedes Zimmer und für jeden Tag den ein Zimmer verfügbar ist, wird eine Tabellenzeile angelegt.
    Ist das eine sinnvolle Struktur?
    Will ich nun zum Beispiel überprüfen ob ein Zimmer für eine gegebene Zeitspanne verfügbar ist, muss ich alle Tage durchgehen und schauen, ob eine Zeile mit gegebenem Tag und entsprechender zimmer_id vorhanden ist - und ob dieser nicht verbucht ist.

    Im Moment schaut diese Methode bei mir so aus (die Daten kommen im MySql-Date-Format rein) - irgendwie glaube ich, dass es da eine insgesamt geschicktere Lösung geben muss.
    PHP-Code:
    public function check($date_1,$date_2) {
        
    $date=strtotime($date_1);
        
    $date_end=strtotime($date_2);
        if(
    $date_end<$date)
            return 
    false;
        while(
    $date<=$date_end) {
            
    $datestring=date("Y-m-d",$date);
            
    $query="SELECT COUNT(*) AS anzahl FROM days
     WHERE rooms_id=
    $this->id AND date='$datestring' AND booked=0";
            
    $result=mysql_query($query);
            
    $row=mysql_fetch_assoc($result);
            if(
    $row[anzahl]==0)
                return 
    false;
            
    $date+=86400;
        }
        return 
    true;

    Kompliziert stelle ich mir dann auch den Algotithmus vor, der abfragt, welche Räume über eine gegebene zeitspanne verfügbar sind.

    Will also nur mal wissen, was ihr von dieser Tabellenstruktur haltet - und ob es nicht geschicktere Lösungen gäbe?

    Viele Grüße,
    Oliver
    Zuletzt geändert von oelias; 15.02.2006, 03:52.

  • #2
    Hallo,

    lieber so:


    Tabelle "ZimmerTag":
    id
    zimmer_id
    datum_vom
    datum_bis

    und dann nur nen Datensatz für den jeweiligen Zeitraum in dem Belegt ist rein.

    ich hab für genau diese Aufgabe 5 oder 6 verschiedene Datenmodelle getestet, auch so wie du es vorgeschlagen hast - bei wenigen Datensätzen ist es fast egal, wie man es angeht, aber bei tests mit einigen hunderttausend Datensätzen hat sich dieses Modell in Sachen performance eindeutig durchgesetzt.
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Kommentar


    • #3
      Vielen Dank für die Antwort!

      Dann würde ich auch mit Timestamps anstelle von Dates arbeiten...

      Wenn die Tabelle nun so ausschaut:

      Tabelle Bookings
      id
      zimmer_id
      startdatum
      enddatum

      würde ich die MYSQL-Abfrage, ob das Zimmer zu gegebenen Zeitraum (datum1, datum2) noch frei ist, nun schlicht so ausführen:

      ...WHERE (datum1>startdatum AND datum1<enddatum) OR (datum2>startdatum AND datum2<enddatum)...

      Wie schaut es da mit der Performance aus? Gibts wieder geschicktere Varianten?

      Viele Grüße,
      Oliver

      Kommentar


      • #4
        die Where-Bedingung sieht bei mir genauso aus. mir fällt da auch keine Alternative ein.
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          Na dann bin ich beruhigt...

          Vielen Dank nochmal!

          Kommentar


          • #6
            suche

            Hallo,
            ich suche so ein System, verkaufst du davon noch ne Kopie?
            Gibt es ne Demo?

            Kommentar

            Lädt...
            X