У меня есть таблица с первичным ключом (давайте назовем его «человек») и другая таблица, которая ссылается на него (давайте назовем его «класс», как в оценках студентов).
В таблице "grade" есть поле "grade.personid", которое является внешним ключом для "person.personid". Допустим, у «person» также есть поле «person.type» (varchar с возможными значениями «student» или «teacher» для простоты), и только студенты имеют оценки.
Как заставить базу данных отклонять любые вставки / обновления, в которых "personid" не учащегося (то есть учителя) помещается в поле "grade.personid".
В настоящее время я работаю с Sql Server 2008, но был бы заинтересован в ответах и для других платформ.
[ grade ]
[ person ] [--------]
[--------] [gradeid ]
[personid] <-FK- [personid]
[type ] [data ]
[name ]
p.s. Я знаю об ограничениях представлений, связанных со схемой, но они мне не очень нравятся, потому что они ломаются всякий раз, когда кто-либо изменяет таблицы, на которые он опирается.