Intro und Systembeschreibung
Ich entwerfe derzeit eine Datenbank für ein Zimmerbuchungssystem in einem Hotel.
Der Kunde füllt ein Formular / eine Anfrage mit folgenden Informationen zu Room aus :
- Anzahl der Personen im Raum
- Bewertung eines Raumes
- Ein- und Auscheckdatum
Der Administrator verfügt über ein Dashboard mit einer Liste der Formulare von Clients . Er weist jedem Client jeden Raum manuell zu. Danach erhält der Benutzer eine Rechnung .
Datenbank Design
Dies ist eigentlich eine Skizze meiner Datenbank. Ich werde folgende Tabellen haben :
- Benutzer
- Formen
- Räume
- Rechnungen
Ich erwäge nicht Tabelle Passwörter , die enthält Passwort des Hashes .
Fragen
Ich würde gerne von Ihnen hören, was in meinem DB-Design fehlt, was Sie über die Gesamtlogik und die Richtigkeit der Beziehungen zwischen Tabellen denken.
mysql
database-design
schema
foreign-key
UserNotFoundException
quelle
quelle
Antworten:
Ohne genaue und vollständige Anforderungen können wir kein vollständiges Datenmodell entwerfen. Nehmen wir die folgenden Geschäftsregeln an, die auf Ihrer Frage basieren.
Basierend auf den obigen Regeln haben wir das folgende Datenmodell entworfen.
Dieses Modell ist eine Teilmenge des Hotelbuchungssystems . Nach dem Normalisierungsprozess (siehe hier ) erhalten Sie ein detaillierteres und vollständigeres Modell.
In dem obigen Modellraum ist Miete basierte auf dem Zimmer - Typ, wie Einzelzimmer, Doppelzimmer, Familienzimmer oder Meeting Hall statt Anzahl der Personen im Raum berechnet.
Und Zimmermiete wird von Zeit zu Zeit geändert, so dass wir das von Datum und bisher aufgenommen haben Geschichte der Raummieten zu haben. Der Kunde kann auch viele Zahlungsarten wie Kreditkarte, Debitkarte und Barzahlung verwenden, sodass wir als Zahlungsart enthalten sind .
Dieses Modell basiert auf der Annahme. Ich hoffe, dieses Modell wird Ihnen irgendwie helfen.
Vielen Dank.
quelle
Nehmen Sie die Rätselraten aus Ihren Abfragen und Ihrem Design heraus, indem Sie beschreibende Namen und Titel verwenden.
Rooms
hatPeople
aber ich würde annehmen das ist eigentlich so etwas wieCapacity
oderRoom Size
. Dies vermeidet Verwechslungen mit der bereits verwendetenPeople
Spalte inForms
. Natürlich könnte dies auch verbessert werden ... so etwasNumberOfGuests
wäre jetzt wahrscheinlich informativer für Sie und jeden, der Ihre Datenbank später abfragt. Ich würde alle Spalten- und Tabellennamen überprüfen, um sicherzustellen, dass sie präzise und klar sind.Räume haben keine automatische Inkrementierung, wahrscheinlich weil Sie erwarten, dass Sie Ganzzahlen verwenden, um Räume zu identifizieren. Dies mag funktionieren, aber Sie können Probleme vermeiden, indem Sie Ihre Geschäfts- / Benutzerraumidentifikation von Ihrer Datenbanklogik trennen. Wenn in Raum 13 ein grausamer Mord begangen wird, der ihn unbrauchbar macht, und der neue Manager, nicht im geringsten abergläubisch oder besorgt über solche Angelegenheiten, diesen Besenschrank auf Etage 14 in Raum 13 verwandelt, weil er groß genug ist und offen gesagt die Qualität unseres Hotels abnimmt .... du bist beschissen. Mit einem von Ihrer Raumbezeichnung getrennten DB-Schlüssel können Sie alle Datensätze und die DB-Integrität sowie die Tatsache beibehalten , dass eine wesentliche Änderung vorgenommen wurde (welche anderen Arten der Änderungsverfolgung und Details sollten wir unterstützen?).
Room 13 | RoomPK 13
kennt sich als Raum 13 aus, kann aber jetzt tatsächlichRoom 13 | RoomPK 132
auch aufgenommen werden. Es ist wichtig, wenn jemand versucht, Sie zu verklagen, als er in Zimmer 13 war, und der gesamte Fall hängt davon ab, in welchem Zimmer 13 er übernachtet hat. Entschuldigung, Ihr Hotel hat viele Probleme.Die letzte Frage ist, wo sind die Transaktionen? Ich würde erwarten, dass ein Formular auch FKs für Bill (s?) Und Rooms (s?) Haben muss. Die Leute müssen irgendwo ein- und auschecken und wir müssen sie speziell für dieses Ereignis und diese Assoziation belasten. Eine Familie kann zwei Zimmer für zwei Tage bekommen, dann morgens auschecken und abends wieder einchecken. Sie sind dann fest davon überzeugt, dass sie nur eine einzige Rechnung erhalten ... Oder jemand, der zwei Nächte bleibt, benötigt zwei Rechnungen aufgrund von zwei verschiedenen Zahlungsmethoden (Kreditkarte, Bargeld, Arbeit, persönlich). Wahrscheinlich benötigen Sie jetzt Nachschlagetabellen, um die Feinheiten der Abrechnung und Buchung zu unterstützen. Die Leute teilen Rechnungen, wechseln die Räume und kehren hoffentlich wieder zurück - all das müssen Sie unterstützen.
quelle
Bei der Entwicklung des Hotelmanagementsystems konzentrieren wir uns auf die folgenden Anforderungen:
Das System sollte die Buchung verschiedener Zimmertypen wie Standard, Deluxe, Familiensuite usw. unterstützen.
Gäste sollten in der Lage sein, das Zimmerinventar zu durchsuchen und jedes verfügbare Zimmer zu buchen.
Das System sollte in der Lage sein, Informationen abzurufen, z. B. wer ein bestimmtes Zimmer gebucht hat oder welche Zimmer von einem bestimmten Kunden gebucht wurden.
Das System sollte es Kunden ermöglichen, ihre Buchung zu stornieren und ihnen eine volle Rückerstattung zu gewähren, wenn die Stornierung vor 24 Stunden nach dem Check-in erfolgt.
Das System sollte in der Lage sein, Benachrichtigungen zu senden, wenn sich die Buchung dem Check-In- oder Check-Out-Datum nähert.
Das System sollte ein Raumprotokoll führen, um alle Reinigungsaufgaben zu verfolgen.
Jeder Kunde sollte in der Lage sein, Zimmerservice und Lebensmittel hinzuzufügen. Kunden können nach verschiedenen Annehmlichkeiten fragen. Die Kunden sollten in der Lage sein, ihre Rechnungen mit Kreditkarte, Scheck oder Bargeld zu bezahlen.
Hier ist ein Klassendiagramm für das Hotelbuchungssystem. Hoffe das hilft.
quelle