L'erreur que vous obtenez semble être due au fait qu'il n'y a pas de tiret bas entre "chartered" et "flight" dans le nom de la table. Je suppose que vous voulez quelque chose comme ceci où le nom de la table est chartered_flight
.
CREATE TABLE chartered_flight(flight_no NUMBER(4) PRIMARY KEY
, customer_id NUMBER(6) REFERENCES customer(customer_id)
, aircraft_no NUMBER(4) REFERENCES aircraft(aircraft_no)
, flight_type VARCHAR2 (12)
, flight_date DATE NOT NULL
, flight_time INTERVAL DAY TO SECOND NOT NULL
, takeoff_at CHAR (3) NOT NULL
, destination CHAR (3) NOT NULL)
Généralement, il n'y a aucun avantage à déclarer une colonne comme CHAR(3)
plutôt que VARCHAR2(3)
. Déclarer une colonne comme CHAR(3)
ne force pas à avoir trois caractères de données (utiles). Cela dit simplement à Oracle de remplir les données avec moins de trois caractères avec des espaces pour atteindre trois caractères. Il est peu probable que cela soit utile si quelqu'un entre accidentellement un code incorrect. Potentiellement, vous pourriez déclarer la colonne comme VARCHAR2(3)
et ajouter une contrainte CHECK
que LENGTH(takeoff_at) = 3
.
CREATE TABLE chartered_flight(flight_no NUMBER(4) PRIMARY KEY
, customer_id NUMBER(6) REFERENCES customer(customer_id)
, aircraft_no NUMBER(4) REFERENCES aircraft(aircraft_no)
, flight_type VARCHAR2 (12)
, flight_date DATE NOT NULL
, flight_time INTERVAL DAY TO SECOND NOT NULL
, takeoff_at CHAR (3) NOT NULL CHECK( length( takeoff_at ) = 3 )
, destination CHAR (3) NOT NULL CHECK( length( destination ) = 3 )
)
Étant donné que à la fois takeoff_at
et destination
sont des codes d'aéroport, vous devriez vraiment avoir une table séparée de codes d'aéroport valides et définir des contraintes clés étrangères entre la table chartered_flight
et cette nouvelle table airport_code
. Cela garantit que seuls les codes d'aéroport valides sont ajoutés et facilite grandement les choses si un code d'aéroport change à l'avenir.
Et du point de vue de la convention de nommage, vu que à la fois takeoff_at
et destination
sont des codes d'aéroport, je suggérerais que les noms soient complémentaires et indiquent ce fait. Quelque chose comme departure_airport_code
et arrival_airport_code
, par exemple, serait beaucoup plus significatif.