OnCall(doctor_id, on_call)
Serializable prevents skew
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN; UPDATE OnCall SET on_call = 0 WHERE doctor_id = 1 AND (SELECT COUNT(*) FROM OnCall WHERE on_call = 1) > 1; COMMIT;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN; UPDATE OnCall SET on_call = 0 WHERE doctor_id = 1 AND (SELECT COUNT(*) FROM OnCall WHERE on_call = 1) > 1; COMMIT;