Das Schema ist das Rückgrat.
Airport-Ticketing-Systeme sitzen an der Schnittstelle von rund einem Dutzend Workflows, die alle konsistent bleiben müssen: Passagier-Datensätze, die sich über Reservierungen 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 abrechnen müssen, auch wenn die zugrundeliegende Buchung modifiziert wird.
Das Schema ist das Rückgrat von all dem. Falsch gemacht, und jeder Workflow oben drauf wird auf eine andere Art korrumpiert.
Sieben Entitäten, Integrität by Construction.
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 trgGenerateEmployeeID Trigger). Foreign Keys erzwingen die Beziehungen, die über Zeit 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 Triggers, vollständige referenzielle Integrität über Foreign Keys, und Constraint-Abdeckung über die operative Fläche. Das Repository enthält das Schema-Skript und einen Projektbericht, der die Design-Rationale durchgeht.
Lehren.
Auto-generierte IDs über Sequences plus Triggers sind eleganter als der IDENTITY-Column-Ansatz, wenn man IDs braucht, die einem bestimmten Format oder Naming-Pattern folgen. Einmal eingerichtet, läuft jedes INSERT einfach. Der Trigger erledigt die Arbeit, die sonst die Application machen müsste, und der Vorteil entsteht auf Datenbankebene.