我需要创建一个只接受字段IndPregnancy'是'或'否'的约束。但这仅适用于田间性别为'F'的情况。
我有这个:
ALTER TABLE CONTROLPACIENT ADD CONSTRAINT controlpacient_c3
CHECK IndPregnancy IN (‘Yes’, ‘No’)
那么,我怎么能放另一个约束,因为性在另一个表中。感谢。
答案 0 :(得分:1)
假设sex
只有M
或F
且indPregnancy
NULL
sex
M
CHECK( (sex = 'F' and indPregnancy IN ('Yes', 'No')) or
(sex = 'M' and indPregnancy IS NULL ) );
sex
ControlPacient
}}
Pacient
如果{{1}}是另一个表中的列,您实际上无法创建约束来强制执行此规则。如果你真的确定了,你可以创建一个快速刷新的物化视图,将两个表连接在一起并创建一个约束。或者,如果您愿意接受90%的解决方案,则可以在查询{{1}}的{{1}}上创建触发器,并在违反规则时引发异常。但是这样的触发器将无法检测到多个会话同时修改数据所产生的问题,除非您实施了大量额外的序列化,这就是为什么它是90%的解决方案而不是100%的解决方案。