sql - 仅接受选定值的外键
问题描述
假设我有以下表格:
EMPLOYEE :
ID(PrimaryKey) | NAME | DESIGNATION
假设 DESIGNATION 可以具有以下值:
- 经理
- 工程师
- 等等等等。
MANAGERS_DETAILS
ID | NAME | SALARY
MANAGERS_DETAILS 中的 ID 是 EMPLOYEE 表 ID 的外键。即,
CONSTRAINT managers_details$fk1 FOREIGN KEY (ID)
REFERENCES EMPLOYEE(ID) ON DELETE CASCADE
有没有限制插入不是经理的员工?即仅当指定员工为经理时才插入表中?
解决方案
如果此人是经理,您可以将虚拟列添加到EMPLOYEE
包含 的表中,并向该虚拟列添加约束。然后您可以将其引用为:id
UNIQUE
FOREIGN 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)
)
/
推荐阅读
- android - 从图像而不是来自实时相机的张量流对象检测
- javascript - 如何正确索引 Javascript 中的嵌套数组?
- javascript - 循环遍历数组以过滤对象数组
- c# - 由于日期实现,C# 从 swagger 生成的客户端无法正常工作
- elasticsearch - 数组中重复值的 value_count 而不是 doc_count
- android - Android Studio 许可证尚未被接受错误
- java - 如何定义arch规则以禁止类捕获特定的异常类型?
- javascript - Instagram 更改 API 流程后,如何使用 Selenium 使用 Python 抓取 Instagram?我无法找到所有条目,只能找到 12 个
- java - 当我开始运行我的 proyect spring boot 进程时,退出代码 1 和异常属性“proxyBeanMethods”完成
- java - 使用 SQL 搜索宾果游戏