Ошибка, которую вы получаете, по-видимому, является результатом того, что в названии таблицы нет подчеркивания между "зафрахтованным" и "рейсом".Я предполагаю, что вы хотите что-то вроде этого, где имя таблицы 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)
Как правило, нет смысла объявлять столбец как CHAR(3)
, а не VARCHAR2(3)
.Объявление столбца как CHAR(3)
не означает наличия трех символов (полезных) данных.Он просто сообщает Oracle, что данные с пробелами должны содержать от трех до трех символов.Это вряд ли будет полезно, если кто-то случайно введет неправильный код.Потенциально вы можете объявить столбец как VARCHAR2(3)
, а затем добавить ограничение CHECK
, которое 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 )
)
Поскольку takeoff_at
и destination
являются кодами аэропортов, вам действительно следуетиметь отдельную таблицу действительных кодов аэропортов и определить ограничения внешнего ключа между таблицей chartered_flight
и этой новой таблицей airport_code
.Это гарантирует, что будут добавлены только действительные коды аэропортов, и в будущем будет намного проще, если код аэропорта изменится.
И с точки зрения соглашения об именах, так как takeoff_at
и destination
являются кодами аэропортов,предложил бы, чтобы имена были дополнительными и указывали на этот факт.Например, что-то вроде departure_airport_code
и arrival_airport_code
будет гораздо более значимым.