Назад | Перейти на главную страницу

MySQL, можно ли запретить два поля быть NULL или NOT NULL?

простая таблица:

ID, NAME, POST_ID, GROUP_ID

либо POST_ID, либо GROUP_ID должны быть установлены, но ни в коем случае не оба, НИ НИ ОДИН из них. Так,

есть допустимые случаи:

ID, NAME, POST_ID, GROUP_ID
x,   y,   1,       NULL
x,   y,   NULL,    4

и НЕ ДЕЙСТВИТЕЛЬНЫЕ случаи:

ID, NAME, POST_ID, GROUP_ID
x,   y,   NULL,    NULL
x,   y,   4,       4

можно ли установить такое сложное правило ограничения?

Я не думаю, что это возможно. Я бы такие случаи отлавливал в интерфейсе, где пользователь вводит данные. Кроме того, вы можете заменить оба поля двумя другими полями:

А category поле типа enum с возможными значениями 'post' или 'group' A reference поле, содержащее идентификатор.

Таким образом, вы можете легко потребовать, чтобы оба были непустыми, и вы могли ссылаться только на идентификатор сообщения или идентификатор группы.