2017-02-22 67 views
1

比方說,我有StaffOracle表具有自身1-M的關係

create table staff (
    staffID number, 
    staffName varchar2(255) 
); 

一個表,但每個工作人員都有零個或多個下屬,誰也都是工作人員。

如何設計表格?

我想補充說,引用其他行的staff

alter table staff add (subordinateID number not null); 

爲了一個額外的列,使之成爲外鍵我也有做subordinateID主鍵

alter table staff add constraint pk primary key (staffID, subordinateID); 

當我實際參考時,即鏈接從屬ID到下屬的staffID

alter table staff add constraint fk foreign key (subordinateID) references staff (staffID); 

有錯誤

ORA-02270:此列列表

這混淆了我,因爲我已經作出staffID主鍵的一部分不匹配的唯一或主鍵?我該怎麼做才能解決這個問題,我該如何設計桌子?

回答

0

試試這個:

create table staff (
    staffID number primary key, 
    staffName varchar2(255), 
    bossID number 
); 

alter table staff add constraint fk_staff_boss 
    foreign key (bossID) references staff(staffID); 
+1

雖然這在大多數情況下,我經常跑進組織,其中一人直接可向兩個人報告,這就是爲什麼我推薦一個分界表。 – HLGEM

+0

這個答案解決了我的問題,但@HLGEM我認爲你創建聯結表的想法更有意義,關係明智 –

1

這可不行,因爲將有多個下屬,你要的是具有subordinateId和經理ID結合表,然後你可以建立層次結構由這是你想要看到整個鏈條。

2

由於員工可以有多個下屬,因此保留subordinate_id列可能是個壞主意 - 它違反了1NF。相反,我建議從另一個方向看一眼,和每個工作人員保持他的經理人的ID,它是獨一無二的:

CREATE TABLE staff (
    staffID NUMBER NOT NULL, 
    staffName VARCHAR2(255), 
    managerId NUMBER 
); 

ALTER TABLE staff ADD CONSTRAINT staff_pk PRIMARY KEY (staffID); 

ALTER TABLE staff ADD CONSTRAINT staff_fk 
FOREIGN KEY (managerID) REFERENCES staff (staffID);