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 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.
Das Schema ist das Rückgrat von all dem. Falsch gemacht, und jeder Workflow obendrauf wird auf eine andere Art korrumpiert.
Sieben Entitäten, Integrität per Konstruktion.
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. Einmal eingerichtet, läuft jedes INSERT einfach. Der Trigger erledigt die Arbeit, die sonst die Anwendung übernehmen müsste, und der Vorteil entsteht auf Datenbankebene.