Предположим, что ваш триггер, измененный в соответствии с уже предоставленными отличными ответами, работает, чтобы гарантировать, что хотя бы один атрибут из набора {first_name, last_name, affiliation} не равен нулю. Предполагая, что у вас также есть суррогатный ключ для идентификационного номера, в этой таблице могут быть такие данные. (Я не знаю, что вы подразумеваете под принадлежностью, поэтому для этого я просто использую символ (1).)
ID first_name last_name affiliation
--
1 NULL NULL A
2 NULL NULL A
3 NULL Nethery B
4 Clare NULL C
5 Christian Guilbert A
6 Christian Guilbert A
7 Christian Armistead A
8 Hugh Marchal B
9 Sharron Sevier A
10 Christian Guilbert NULL
Допустим, вас зовут "Кристиан Гильберт". Только одна из этих строк (одна из этих суррогатных идентификационных номеров) принадлежит вам. Какой это?
Подумайте, действительно ли это то, что вы хотите сделать. Мое первое практическое правило для ограничений базы данных: все, что позволяет dbms, в конечном итоге попадет в вашу базу данных. (Однажды я видел, как ИТ-отдел Fortune 500 выпустил приложение, которое позволяло пользователям вводить отрицательные размеры для транспортных контейнеров. Таким образом, в вагон можно поместить много коробок. На бумаге.)
ИМХО, каждый из этих трех столбцов должен быть объявлен как NOT NULL. И я собираюсь поддержать всех остальных, кто тоже так говорит.
(Имена любезно предоставлены Генератор случайных имен .)