2017-04-19 20 views
0

私はこのSQL ORA-02270:この列リストに該当する一意キーまたは主キー

CREATE TABLE sickness 
(
sickness_id  number(2), 
sickness_name varchar2(20), 
PRIMARY KEY (sickness_id) 
); 

CREATE TABLE cover 
(
cover_needed char(1) NOT NULL, 
employee_id number(3), 
responsibilities varchar2(50), 
notes varchar2(50), 
PRIMARY KEY (cover_needed, employee_id) 
); 

のように見えるいくつかのテーブルを作成しています私は親テーブルを作成しようとすると、これは(その後、正常に動作します以下を参照)、私はエラーを取得します。

ORA-02270: no matching unique or primary key for this column-list 

しかし私は、最後の行にそれを絞られているが、私は私の人生のためにそれを把握することはできません、これはあなたがどのように定義するかであるあなた

CREATE TABLE absences 
(
absences_id number(2) NOT NULL, 
manager_id number(3), 
employee_id number(3) NOT NULL, 
absence_name varchar2(15) NOT NULL, 
sickness_id number(2), 
date_from date NOT NULL, 
date_to date NOT NULL, 
length number(2) NOT NULL, 
description varchar2(40), 
authorised_by_manager char(1) NOT NULL, 
cover_needed char(1) NOT NULL, 
half_day char(1) NOT NULL, 

PRIMARY KEY (absences_id, manager_id, employee_id), 

FOREIGN KEY (sickness_id) REFERENCES sickness (sickness_id), 
FOREIGN KEY (cover_needed) REFERENCES cover (cover_needed) 
); 

答えて

0

に感謝cover

CREATE TABLE cover (
    . . . 
    **PRIMARY KEY (cover_needed, employee_id)** 
); 

複合主キーがあります。外部キー参照は、両方のキーを参照する必要があります。 。 。同じ順序で。だから、

FOREIGN KEY (cover_needed, employee_id) 
    REFERENCES cover (cover_needed, employee_id) 

私はあなたが自動生成された数値の主キーを使用している場合、あなたのデータ構造とクエリは単純だと思います。これにより、外部キーの関係が単純化され、テーブルを結ぶクエリが簡略化されます。

+0

私の唯一の事は私のカバーテーブルが異なる外部キーを使用する2つのテーブルに接続されているが、私のemployee_idは、abskeyテーブルの主キーではなく、PFkey employee_idを持つ別のテーブル。それが意味があれば –

+0

@SeanKhanna。 。 。いいえ、あなたのコメントは本当に意味をなさない。しかし、主キーを合成するのではなく、テーブル内の各*行*を識別する単一の列を持つべき理由を強調しています。 –

関連する問題