2016-11-21 18 views
1

私はかなり新しいSQLですが、問題があります。私は再帰的な関係(それ自体に関連するテーブル)を作ってみたいが、自分のコードを実行しようとするとエラーが出る。 Coordinator_Office_ID外部キーなしで正常に動作しています。再帰関係SQLエラー

エラーがある:

外部キー参照リスト内の列の数は、参照リスト内の列の数に 等しくありません。

Create table Logistican (
    Office_ID Number(10) Constraint nb_office Not NULL, 
    Worker_ID Number(15) Constraint lg_worker not null, 
    Name_logistican Varchar(20), 
    Room Varchar(10) constraint log_room UNIQUE, 
    Coordinator_Office_ID Integer, 
    Primary key (Office_ID, Worker_ID), 
    Constraint work_id Foreign key (Worker_ID) References worker(worker_ID) on  delete cascade, 
    Constraint lg_cord_id Foreign key (Coordinator_Office_ID) References  Logistican(Office_ID) 
); 
+0

と'Office_ID'? –

+0

私は教授がそのように書いているのを見ましたが、それが正しいかどうかわかりません – specbk

答えて

2

alter tableに制約を追加します。

Create table Logistican (
    Office_ID Number(10) Constraint nb_office Not NULL, 
    Worker_ID Number(15) Constraint lg_worker not null, 
    Name_logistican Varchar(20), 
    Room Varchar(10) constraint log_room UNIQUE, 
    Coordinator_Office_ID Integer, 
    Primary key (Office_ID, Worker_ID), 
    Constraint work_id Foreign key (Worker_ID) References worker(worker_ID) on delete cascade 
); 

alter table Logistican 
    add Constraint lg_cord_id 
     Foreign key (Coordinator_Office_ID, Worker_Id) References  Logistican(Office_ID, Worker_Id); 

関係が有効であると主キーのすべての要素を必要とします。私はそれがOracleの別のステートメントである必要があるかどうかはわかりません。あなたは `Coordinator_Office_ID`のためのさまざまな種類を使用しないのはなぜ

+0

私はそれを試しましたが、それでも動作しません。 – specbk

+0

ありがとう、それは働いた! – specbk

2

はい、それはあなたがPrimary key (Office_ID, Worker_ID)のような複合主キーを定義しているので、あなたのFKが他のそれらの両方を含める必要があり、それがPFDに(部分的な機能の依存関係を)なります原因だ