Employee/History - 复合键的一部分作为外键
Employee/History - Part of composite key as foreign key
我有 2 个实体:
1) 员工 (Parent)
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 (Child)
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
上创建约束,因为我的 child table 中有一个复合键。我知道当员工进入数据库时,parent table 会被填写,"start date" 应该与其他所有内容一起填写。但是,如果我的 parent table 中也有 start_date,我不明白这将如何工作。我可以创建我的约束,是的,但是如果我的 start_date 是在员工输入数据库时输入的,我将如何记录 start_date 中的更改.
我考虑过使用 job_title 作为主键而不是 start_date 因为它在两个 table 中都存在,但是当员工得到时会发生什么又升又降?插入相同的 employee_id 和 job_title 时不会出现重复值约束吗?
您的 references
子句需要引用 parent table。不是 child table
ALTER TABLE employee_history
ADD CONSTRAINT employee_history_fk
FOREIGN KEY (employee_id)
REFERENCES employee(employee_id); -- employee not employee_history
您发布的 SQL 试图创建一个 self-referential 外键,其中 employee_history
既是 parent 又是 child。在这种情况下这没有意义。
我有 2 个实体:
1) 员工 (Parent)
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 (Child)
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
上创建约束,因为我的 child table 中有一个复合键。我知道当员工进入数据库时,parent table 会被填写,"start date" 应该与其他所有内容一起填写。但是,如果我的 parent table 中也有 start_date,我不明白这将如何工作。我可以创建我的约束,是的,但是如果我的 start_date 是在员工输入数据库时输入的,我将如何记录 start_date 中的更改.
我考虑过使用 job_title 作为主键而不是 start_date 因为它在两个 table 中都存在,但是当员工得到时会发生什么又升又降?插入相同的 employee_id 和 job_title 时不会出现重复值约束吗?
您的 references
子句需要引用 parent table。不是 child table
ALTER TABLE employee_history
ADD CONSTRAINT employee_history_fk
FOREIGN KEY (employee_id)
REFERENCES employee(employee_id); -- employee not employee_history
您发布的 SQL 试图创建一个 self-referential 外键,其中 employee_history
既是 parent 又是 child。在这种情况下这没有意义。