如何根据其他属性值定义或更改域? F.E.薪水的领域是一个数值> 500.但是,如果该人被雇用的日期> 2013年1月1日,那么工资必须> 1000。
提前感谢您的帮助!
答案 0 :(得分:1)
create table emp (
empno number,
hire_date date,
salary number,
constraint ck_hire_salary check ( (hire_date > date '2013-01-01' and salary > 1000) or
(salary > 500) );
不可否认,这是Oracle语法,因为我不再经常使用psql,但这本质上应该可行。
对于这样的事情使用触发器,不可不。
并且只有(单个)否,对这样的事情使用检查约束。这是业务逻辑而不是数据完整性逻辑,因此使用检查约束可能是一个坏主意。
答案 1 :(得分:0)
没有。域定义了类型中固定的值子集。谈论薪水领域的依赖关系而不是数字关系是没有意义的。它们是他们自己的东西,没有连接到桌子上。
当然,您可以在表上设置触发器以强制执行此类业务规则。
从理论上讲,你可以创建自己的类型组合(salary,employment_date)但是因为它们(大概)是不相关的,这让我感觉很糟糕。