假设我有一张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
作为主键的一部分了?我该怎么做才能解决这个问题,我应该如何设计表格呢?
答案 0 :(得分:2)
由于工作人员可以有多个下属,保留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);
答案 1 :(得分:1)
这不起作用,因为会有多个下属,你想要的是一个包含subordinateId和managerid的联结表,然后你就可以构建层次结构,你想要看到整个链。
答案 2 :(得分: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);