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。在这种情况下这没有意义。