您遇到的錯誤似乎是表名中「chartered」和「flight」之間沒有下劃線的結果。我假設你想要這樣的東西,其中表的名稱是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
就會更有意義。
表名不能有空格。 –
有空格是不好的做法,但如果你真的想在表名中有一個空格,你需要用雙引號括起來。這會在以後導致更多麻煩。然而,表名不能有空格的說法並不完全正確。 這工作: 創建表的「我愛的空間」 (space_id整數,chartered_flight CHAR(10)) – abhi