エラーは、表名に「チャーター」と「フライト」の間にアンダースコアがないために発生しているようです。テーブルの名前が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)
と宣言しても、(有用な)データは3文字になることはありません。これは、Oracleに、3文字未満の3文字のデータをスペース・パッドするように指示するだけです。誰かが誤って間違ったコードを入力した場合、それは役に立ちません。列を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
のようなものは、はるかに意味があります。
テーブル名にスペースを入れることはできません。 –
スペースを入れるのは悪い習慣ですが、実際にテーブル名にスペースを入れたい場合は、二重引用符で囲む必要があります。後でもっと問題につながるでしょう。しかし、TABLE NAMEがスペースを持つことはできないという声明は、正確に正しいとは言えません。 これは動作します: は 「私はスペースを愛する」テーブルを作成 (space_id整数、chartered_flight CHAR(10)) – abhi