2010-09-28 4 views
1

Я хочу осуществить своего рода исключающего ограничения на внешние ключи в MySQL 5.1XOR Constraint в Mysql

Существует эта таблица, скажем, лицо, которое может относиться к двум различным видам valuesets, представленных таблицах Valsa и ValsB. Теперь я хотел бы реализовать ограничение, которое гарантирует, что только один из этих двух отображается, а другой - нет.

В Oracle вы можете использовать что-то вроде

CHECK (NVL2(FK_A,1,0)+NVL2(FK_B,1,0)=1)); 

, но, насколько я понимаю, MySQL не поддерживает действительно проверочных ограничений (пока).

Любые идеи?

+0

Я не понимаю, почему вы не реализуете его с большей ясностью: 'CHECK ((FK_A IS NULL и FK_B НЕ ЯВЛЯЕТСЯ) ИЛИ (FK_A НЕ ЯВЛЯЕТСЯ NULL И FK_B NULL)); –

+0

да, вы правы. ваше заявление более читаемо. но все равно не поможет. но тем не менее я буду использовать ваше предложение в нашем приложении oracle. ty –

ответ

2

Исправить. MySQL не поддерживает контрольные ограничения. Предложение CHECK анализируется, но игнорируется всеми механизмами хранения.

Вам нужно будет принудительно выполнить условие XOR на стороне клиента.

+0

ОК спасибо. Я надеялся, что есть альтернативный способ реализовать это на стороне бит. моя забота заключается в том, что будущий программист может контролировать эту логику, если он только ухаживает за слоем db. например, путем написания сценария импорта. –

Смежные вопросы