Sql 如何编写此约束?
任务是为常规约束编写alter查询。具体来说:在Employee中,如果EmployeeLevel为空,则EmployeeSalary也必须为空。如果有人能解释一个正确的解决方案,我们将不胜感激Sql 如何编写此约束?,sql,postgresql,check-constraints,generic-constraints,Sql,Postgresql,Check Constraints,Generic Constraints,任务是为常规约束编写alter查询。具体来说:在Employee中,如果EmployeeLevel为空,则EmployeeSalary也必须为空。如果有人能解释一个正确的解决方案,我们将不胜感激 ALTER TABLE Employee ADD CONSTRAINT CHECK ( EmployeeLevel IS NULL AND EmployeeSalary IS NULL ); 这里有一种方法: CHECK (EMPLOYELEVEL IS NOT NULL OR EmployeeSa
ALTER TABLE Employee
ADD CONSTRAINT
CHECK (
EmployeeLevel IS NULL
AND EmployeeSalary IS NULL
);
这里有一种方法:
CHECK (EMPLOYELEVEL IS NOT NULL OR EmployeeSalary IS NULL)
您可能会发现逻辑并不清晰:
CHECK (NOT (EMPLOYELEVEL IS NULL AND EmployeeSalary IS NOT NULL))
该语句如果employeeLevel不为null,则可以接受employeeSalary可以为null。反之亦然。也就是说,如果employeeSalary不为null,那么employeeLevel可以为null,但这与最初的问题陈述相矛盾。如果employeeLevel为null,那么employeeSalary也必须为null。结果是一个直接的或条件,并且是意图的最清晰表达:
check ((EmployeeLevel is null and EmployeeSalary is null) or (EmployeeLevel is not null))
反之亦然吗?如果EmployeeLevel不为空,EmployeeSalary也必须不为空吗?射程呢?如果它是varchar,是允许负工资还是空EmployeeLevel。我相信如果EmployeeLevel不为null,那么employeeSalary可以为null。反之亦然。