2011-06-28 17 views
3

データベース設定中:OS上でのOracle 10.1:xp2002奇妙な問題の外部キー

私は、従業員テーブルの外部キーを設定していますが、それは私がエラー

このコラムに該当一意キーまたは主キーを取得します-list

私はテーブルを作成するために次のクエリを使用しています。

Departmentテーブル:

create table department(
d_name varchar2(10) not null, 
d_no_of_employees number(4)); 

Employeeテーブル:

create table employee(
e_id  number(4)  , 
e_name  varchar2(30)  not null, 
e_f_name varchar2(30)  not null, 
e_desg  varchar2(20)  not null, 
e_address varchar2(50)  not null, 
e_phone_no number(12)  not null, 
e_salary number(10)  not null, 
e_house_rent number(6) not null, 
e_conv_allow number(6) not null, 
e_email  varchar2(50)  not null unique, 
d2_name  varchar2(10)  not null,  
e_hire_month number(2) not null, 
e_hire_year number(4) not null, 
constraint e_id_pk primary key(e_id), 
constraint d2_name_fk foreign key(d2_name) references department(d_name)) 
; 

どれ解決してください。

+0

おかげquries上記のOracle 9iのでの作業中は、誰もその理由を説明してくださいfine.could働いていましたか? – Adnan

+3

親テーブルのプライマリ・キーまたはユニーク・キーを参照していない外部キーを作成することはできませんでした。 –

答えて

5

外部キーは、他のテーブルのプライマリキーまたはユニークキーでなければなりません。

+0

thanks.butよりも上のOracle 9iで作業していましたが、その理由を説明してください。 – Adnan

+1

@Adnan - 古いデータベースの 'D_NAME'に少なくとも一意のインデックスがないことは確かですか?外部キーは、プライマリキーのみを参照する必要がありますが、一意であると宣言されている親を参照できます。 –

+1

@Adrian - 9iバージョンでは、 'department'テーブルの作成後にPKを追加した別の' alter table'コマンドがありましたか? –

2

部門テーブルのd_name PRIMARY KEYを作成します。

create table department(
d_name varchar2(10) not null, 
d_no_of_employees number(4), 
constraint d_name_pk primary key(d_name)); 

次に、Employeeテーブルを作成します。

2

departmentテーブルにプライマリキーがないようです。

create table department(
d_name varchar2(10) not null, 
d_no_of_employees number(4) 
constraint department_pk primary key(d_name)); 

または作成後

:ような何かyou.butの全てに

alter table department 
add constraint department_pk primary key(d_name) 
...