[英]Oracle table having 1-M relationship with itself
假設我有一張Staff
表
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);
當我實際引用時,即將subordinateID鏈接到下屬的staffID
alter table staff add constraint fk foreign key (subordinateID) references staff (staffID);
有一個錯誤
ORA-02270:此列列表沒有匹配的唯一鍵或主鍵
這讓我感到困惑,因為我已經將staffID
作為主鍵的一部分了? 我該怎么做才能解決這個問題,我應該如何設計表格呢?
由於工作人員可以有多個下屬,保留subordinate_id列可能是個壞主意 - 它違反了1NF。 相反,我建議從另一個方向看,並且每個工作人員保留他的經理的身份,這是獨一無二的:
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);
這不起作用,因為會有多個下屬,你想要的是一個具有subordinateId和managerid的聯結表,然后你可以構建層次結構,你想要看到整個鏈。
嘗試這個:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.