Database
 sql >> Datenbank >  >> RDS >> Database

Entwerfen eines Datenmodells für ein Hotelzimmer-Buchungssystem

Es ist allgemein bekannt, dass der beste Weg, etwas zu lernen, darin besteht, es in einem realen Szenario zu üben. Gleiches gilt natürlich auch für die Datenbankmodellierung. Daher habe ich mich in diesem Artikel entschlossen, Ihnen anhand eines Lehrbuchbeispiels für ein Hotelzimmerreservierungssystem beizubringen, wie Sie eine einfache Datenbankstruktur erstellen. Ich zeige Ihnen die ersten Schritte und gebe Ihnen einige Ideen zur Erweiterung des Modells.

Datenbankmodellierung:Entdecken, Entdecken, Entdecken

In diesem Artikel entwerfen wir ein Datenmodell für ein Hotelzimmerreservierungssystem. Wir suchen nach einem Datenmodell, in dem wir Informationen über die Zimmer, die Gäste und die gebuchten Reservierungen unseres imaginären VERTABELO***** Hotels darstellen können. Alle diese Informationen werden in Tabellen gespeichert.

Die Datenbankmodellierung ist ein zyklischer Discovery-Prozess. Wir identifizieren zuerst die Haupttabellen und ihre Attribute. In unserem Modell sind die Haupttabellen:room , guest und reservation . Dann verfeinern wir unsere Tabellen weiter, indem wir ihre Attribute oder Spalten entdecken. Zum Beispiel room Tabelle hat Attribute wie:Raum number , name und smoke Flagge unter anderem.

reservation Tabelle hat die Attribute date_in , date_out , status (abgesagt, bestätigt) und made_by (online, in_person, phone, mail), während die Attribute der Tabelle guest sind:first_name , last_name und member_since . Vielleicht haben Sie Lust auf die reservation Tabelle benötigt weitere Attribute (wie Zimmertyp, Anzahl der Betten), wir werden diesen Punkt später behandeln, bis dahin beachten Sie unsere reservation Tabelle unvollständig. Das folgende in Vertabelo erstellte Datenmodell zeigt die Haupttabellen.




Datentypen:Was sind die Domänen zulässiger Werte für eine Spalte?

Beachten Sie, dass jede Spalte einen Datentyp (varchar, integer, date, boolean) hat, um anzugeben, welche Art von Werten der Spalte zugewiesen werden können. Zum Beispiel die Spalte smoke auf Tisch room ist boolesch Datentyp, was bedeutet, dass nur wahr oder falsch die zulässigen Werte sind.

Primärschlüssel:die Sozialversicherungsnummer jedes Datensatzes

Jede Tabelle sollte eine Spalte (oder mehr als eine) haben, die als Kennung für jeden Datensatz in der Tabelle dient. Diese Spalte wird als Primärschlüssel (PK) bezeichnet, und Best Practices für das Datenbankdesign legen nahe, dass jede Tabelle einen PK haben muss.

Wenn wir uns das vorherige Vertabelo-Datenmodell ansehen, sehen wir, dass jede Tabelle eine Spalte namens id hat mit einer PK-Anzeige auf der rechten Seite. Diese ID-Spalten bilden den PK (als Konvention nennen wir id die PK-Spalte).

Ein wichtiges Konzept, vielleicht offensichtlich für viele Leser, ist, dass eine PK-Spalte keine doppelten Werte haben kann. Mit anderen Worten, jede PK-Spalte hat eine eindeutige Einschränkung, und jeder Versuch, einen neuen Datensatz mit einem doppelten Wert zu erstellen, wird vom Datenbankmanager mit einem Fehler zurückgewiesen.

Entdecken Sie weiter; Neue Datenbankobjekte suchen

Eine Reservierung ist eines der komplexeren Elemente, die in diesem Datenmodell dargestellt werden müssen. Einer Reservierung können mehrere Zimmer zugeordnet sein (z. B. „Ich möchte ein Doppelzimmer und ein separates Zimmer mit 3 Betten für meine Kinder reservieren“). Diese Geschäftsanforderung fügt unserem Modell vier Dinge hinzu:

Eine neue Tabelle: Wir müssen eine neue Tabelle namens room_reserved , wo wir alle Zimmer einer Reservierung speichern.

Zwei Referenzen hinzufügen: Eine Referenz ist ein sehr wichtiges Element in einem Datenmodell. Eine Referenz beschreibt, wie eine Tabelle mit einer anderen Tabelle in Beziehung steht. In unserem Modell gehört jedes reservierte Zimmer zu einer Reservierung, daher verwenden wir eine Referenz, um diese Tatsache zu modellieren. Diese Referenz wird grafisch als Linie dargestellt, die beide Tabellen verbindet.

Da jede Reservierung einem Gast gehört, müssen wir außerdem eine neue Referenz erstellen, die den guest und die reservation Tische.

Spalte verschieben: Da wir mehrere Zimmer zu einer Reservierung gehören können, müssen wir die Stornierung pro Zimmer zulassen, danach verschieben wir das attribute Status von reservation zu reserved_room Tabelle.

Das aktualisierte Datenmodell wird im folgenden Diagramm dargestellt, das in Vertabelo entworfen wurde:



Was passiert mit den durch eine Referenz verknüpften Tabellen?

Wenn wir eine Referenz zwischen zwei Tabellen erstellen, wird einer der Tabellen eine neue Spalte hinzugefügt. Diese gerade hinzugefügte Spalte wird als Fremdschlüssel bezeichnet und fungiert als Zeiger auf die andere Tabelle, die Verbindungen zwischen Tabellen ermöglicht. Sehen Sie sich zum Beispiel die folgenden Diagramme an:

Abb. 1 Tische reservation und guest vor und nach dem Hinzufügen einer Referenz

Entdecken Sie weiter; Gehen Sie für mehr

Ein zu modellierender Punkt ist die Tatsache, dass Räume von einigen Gästen für einen bestimmten Zeitraum genutzt werden können. Um diese geschäftliche Tatsache darzustellen, haben wir zwei Tabellen hinzugefügt:hosted_at und occupied_room .

Beachten Sie, dass jede Person, die im Hotel übernachtet hat, einen Eintrag in hosted_at . Diese Aufzeichnung enthält einen Verweis auf das Zimmer, das er/sie belegt hat, und auf den Gast. Deshalb hosted_at hat einen doppelten Verweis auf guest und occupied_room .

Die Tabelle occupied_room wird einen Datensatz für jedes vermietete Zimmer haben, in diesem Datensatz finden wir die Felder:check_in und check_out vom Typ Zeitstempel, der angibt, wann die Miete beginnt und endet. Ein Timestamp-Datentyp speichert einen Zeitpunkt mit beliebiger Genauigkeit. Jeder occupied_room Der Datensatz hat auch einen Bezug zur angemieteten Zimmernummer und indirekt über hosted_at an die Gäste, die in diesem Zimmer übernachtet haben.

Wir haben auch die Tabelle room_type zum Datenmodell; die idee ist, die zimmer nach zimmerkategorie oder zimmertyp zu gruppieren. Beispielsweise können „Standard 1 Doppelbett“, „Luxus 2 Doppelbetten“ Typenbeschreibungen sein. Wir haben hier auch ein max_capacity-Attribut.




Übungen: Das Datenbankdesign ist eine leicht zugängliche Disziplin, es braucht jedoch Zeit, um ein Fachexperte zu werden. Wenn Sie Ihre ersten Schritte im Datenbankdesign unternehmen, versuchen Sie bitte, das aktuelle Datenmodell zu vervollständigen, um Folgendes zu ermöglichen:

  • Wenn sich zwei oder mehr Gäste ein Zimmer teilen, erlauben Sie jedem Gast einen anderen Check-in und Check-out.
  • In einigen Fällen können Hotels die Konfiguration der Zimmer ändern (z. B. von Standard mit einem Doppelbett zu Luxus mit 2 Doppelbetten). Fügen Sie dem Datenmodell die Elemente hinzu, um diese Konfigurationsänderungen darzustellen, und behalten Sie den Verlauf jedes Raums bei.