SQL:创建域时的“条件”

时间:2013-11-20 20:21:44

标签: sql postgresql ddl

如何根据其他属性值定义或更改域? F.E.薪水的领域是一个数值> 500.但是,如果该人被雇用的日期> 2013年1月1日,那么工资必须> 1000。

提前感谢您的帮助!

2 个答案:

答案 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)但是因为它们(大概)是不相关的,这让我感觉很糟糕。