【发布时间】:2015-03-26 18:19:37
【问题描述】:
我有 2 个实体:
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 时不会出现重复值约束吗?
【问题讨论】:
-
我没听懂——你为什么不能在
employee_id上创建外键?子表具有复合主键这一事实不会影响您仅使用两列之一来定义外键约束的能力。您的ALTER TABLE语句是否引发异常?如果有,有什么例外? -
抱歉,我得到的错误是:“ORA-02270: no matching unique key or primary key for this column-list”
标签: oracle foreign-keys constraints entities composite-primary-key