首页 > 解决方案 > 仅接受选定值的外键

问题描述

假设我有以下表格:

EMPLOYEE : 
    ID(PrimaryKey) | NAME | DESIGNATION 

假设 DESIGNATION 可以具有以下值:

  1. 经理
  2. 工程师
  3. 等等等等。
MANAGERS_DETAILS 

    ID | NAME | SALARY

MANAGERS_DETAILS 中的 ID 是 EMPLOYEE 表 ID 的外键。即,

CONSTRAINT managers_details$fk1 FOREIGN KEY (ID) 
    REFERENCES EMPLOYEE(ID) ON DELETE CASCADE

有没有限制插入不是经理的员工?即仅当指定员工为经理时才插入表中?

标签: sqloracledatabase-designforeign-keys

解决方案


如果此人是经理,您可以将虚拟列添加到EMPLOYEE包含 的表中,并向该虚拟列添加约束。然后您可以将其引用为:idUNIQUEFOREIGN KEY

CREATE TABLE employee (
  id          NUMBER(10,0) PRIMARY KEY,
  name        VARCHAR2(100),
  designation VARCHAR2(10),
  idIfManager NUMBER(10,0) GENERATED ALWAYS AS (
                  CASE DESIGNATION WHEN 'MANAGER' THEN id END
                ) VIRTUAL
                CONSTRAINT employee__idIfManager__u UNIQUE
)
/

CREATE TABLE manager_details (
  id     NUMBER(10,0)
         PRIMARY KEY
         REFERENCES employee ( idIfManager ),
  name   VARCHAR2(100),
  salary NUMBER(12,2)
)
/

推荐阅读