Warum das Schema entscheidend ist.
Airport-Ticketing-Systeme verbinden rund ein Dutzend Workflows, die alle konsistent bleiben müssen: Passagier-Datensätze, die sich über Reservierungen hinweg aktualisieren, Flugpläne, die sich ändern, während Tickets bereits ausgestellt sind, Gepäcktracking, das am richtigen Passagier und Flug hängen muss, ergänzende Services (Mahlzeiten, Seat-Upgrades), die korrekt abgerechnet werden müssen, auch wenn die zugrundeliegende Buchung modifiziert wird.
Jeder dieser Workflows hängt vom Schema ab, und ein Fehler im Schema beschädigt jeden Workflow auf andere Weise.
Sieben Entitäten mit eingebauten Integritätsregeln.
Sieben Kern-Entitäten: Employee, Passenger, Flight, Reservation, Ticket, AdditionalServices, Baggage. Jede hat einen sauberen Primary Key, der über eine SQL-Server-Sequence generiert wird (z. B. EmployeeSeq kombiniert mit dem Trigger trgGenerateEmployeeID). Foreign Keys erzwingen die Beziehungen, die dauerhaft halten müssen: ein Ticket kann nicht ohne seine Reservation existieren, eine Reservation nicht ohne Passenger und Flight.
Constraints erledigen den Rest. CHECK-Constraints auf Datumsreihenfolge (Departure kann nicht vor Arrival liegen), NOT NULL auf jedem Feld, das in einem echten Ticketing-Workflow nie optional sein darf, UNIQUE-Constraints auf den Dingen, die eindeutig sein müssen (Reisepassnummern, Flugcodes pro Datum).
Was ausgeliefert wurde.
Vollständiges SQL-Server-Schema mit sieben Tabellen, automatisierter ID-Generierung über Sequences und Trigger, vollständiger referenzieller Integrität über Foreign Keys und Constraint-Abdeckung über den gesamten operativen Bereich. Das Repository enthält das Schema-Skript und einen Projektbericht, der die Design-Rationale durchgeht.
Erkenntnisse.
Auto-generierte IDs über Sequences plus Trigger sind eleganter als der IDENTITY-Column-Ansatz, wenn man IDs braucht, die einem bestimmten Format oder Naming-Pattern folgen. Sobald Sequence und Trigger eingerichtet sind, erhält jedes INSERT automatisch eine korrekt formatierte ID. Der Trigger erledigt die Arbeit, die sonst die Anwendung übernehmen müsste, und der Vorteil entsteht auf Datenbankebene.