我有两个实体:
1)员工(家长)
CREATE TABLE EMPLOYEES (
employee_id NUMBER (3) NOT NULL,
first_name VARCHAR (20) NOT NULL,
last_name VARCHAR (20) NOT NULL,
job_title VARCHAR (20) NOT NULL,
employee_type VARCHAR (1) NOT NULL,
salary NUMBER (5),
hourly_pay NUMBER (5,2),
bonus_pay NUMBER (5,2),
CONSTRAINT employee_pk PRIMARY KEY(employee_id));
2)EMPLOYEE_HISTORY(儿童)
CREATE TABLE EMPLOYEE_HISTORY (
start_date DATE NOT NULL,
employee_id NUMBER (3) NOT NULL,
end_date DATE,
job_title VARCHAR (10) NOT NULL,
hourly_rate NUMBER (5,2) NOT NULL,
CONSTRAINT employee_history_pk PRIMARY KEY(start_date, employee_id));
我试图创建:
ALTER TABLE employee_history
ADD CONSTRAINT employee_history_fk
FOREIGN KEY (employee_id)
REFERENCES employee_history(employee_id);
当我这样做时,我收到错误
ORA-02270: no matching unique or primary key for this column-list
我的猜测是我无法在employee_id
上创建约束,因为我的子表中有一个复合键。我理解当员工被放入数据库时,父表被填写并且"开始日期"应该和其他一切一起填写。但是,如果我在父表中也有start_date,我不明白这是如何工作的。我可以创建我的约束,是的,但是如果在员工输入数据库时输入了start_date,我将如何能够记录start_date中的更改。
我考虑过使用job_title作为主键而不是start_date,因为它存在于两个表中,但是当员工再次升级和降级时会发生什么?当插入相同的employee_id和job_title时,是否会出现重复值约束?
答案 0 :(得分:0)
您的references
子句需要引用父表。不是子表
ALTER TABLE employee_history
ADD CONSTRAINT employee_history_fk
FOREIGN KEY (employee_id)
REFERENCES employee(employee_id); -- employee not employee_history
您发布的SQL正在尝试创建自引用外键,其中employee_history
是父项和子项。在这种情况下,这没有意义。