簡體   English   中英

Oracle表與自身有1-M關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM