0

我需要创建一个仅在 IndPregnancy 'Yes' 或'No' 字段中接受的约束。但这仅适用于字段性别为“F”时。

我有这个:

ALTER TABLE CONTROLPACIENT ADD CONSTRAINT controlpacient_c3
CHECK IndPregnancy IN (‘Yes’, ‘No’)

那么,我怎么能设置另一个约束,因为性别在另一个表中。谢谢。

4

1 回答 1

1

假设那sex只能是MorF并且那indPregnancy应该是NULLwhen sexisM

CHECK( (sex = 'F' and indPregnancy IN ('Yes', 'No')) or
       (sex = 'M' and indPregnancy IS NULL ) );

如果sex是不同表中的列,则实际上无法创建约束来强制执行此规则。如果你真的下定决心,你可以创建一个快速刷新的物化视图,将两个表连接在一起,并在其上创建一个约束。或者,如果您愿意接受 90% 的解决方案,您可以在ControlPacient该查询上创建触发器,Pacient并在违反规则时引发异常。但是这样的触发器将无法检测到多个会话同时修改数据所产生的问题,除非您实施大量额外的序列化,这就是为什么它是 90% 解决方案而不是 100% 解决方案的原因。

于 2013-10-13T22:27:46.727 回答