2011-06-28 64 views
3

數據庫的奇怪問題xp2002而設置的外鍵

我設置外鍵employee表,但我得到一個錯誤

此列不匹配的唯一或主鍵-list

我正在使用以下查詢來創建表。

系表:

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

感謝所有you.but的,在Oracle 9i以上quries工作時,被工作fine.could請人解釋其原因是什麼? – Adnan

+3

在Oracle中,創建一個沒有在父表中引用主鍵或唯一鍵的外鍵, –

回答

5

外鍵必須是另一個表中的主鍵或唯一鍵。

+0

表示感謝,但在上面的問題中使用oracle 9i時表現良好,請您解釋其原因嗎? – Adnan

+1

@Adnan - 你確定舊數據庫中'D_NAME'上至少沒有唯一的索引嗎?外鍵可以引用被聲明爲唯一的父代,儘管它應該只引用主鍵。 –

+1

@Adrian - 在9i版本中,是否有單獨的'alter table'命令在'department'表創建後添加了PK? –

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)); 

或者創建後:喜歡的東西

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