Похоже, вы ищете систему, которая позволяет объявлять ограничения базы данных произвольной сложности. Я предполагаю, что вы хотите отследить нарушения ограничения в тот момент, когда они сделаны, а не в какой-то процедуре проверки после факта.
Для этого вам нужна реляционная СУБД, и, увы, такого еще не существует.
Чтобы сделать это в системе SQL, вы можете написать огромное количество кода принудительного применения ограничений и спрятать их в триггерах и т. Д. Если об этом не может быть и речи из-за политики и тому подобного, в настоящее время не существует рабочего решения вашей проблемы.
Остерегайтесь тех, кто ведет вас к объектным решениям, которые не могут быть тесно связаны с самой СУБД. В конце концов, кто-то развернет некоторый код, который обходит ваши правила принудительного применения ограничений вне базы данных, оставляя вас именно там, где вы были, когда решили задать этот вопрос.
Я согласен со Сплифом. Постконтактная проверка ограничений мне тоже кажется глупой идеей. Но если это то, что вы действительно хотите, то вот возможный подход:
Согласно теории, все ограничения базы данных могут быть сформулированы как «запрос, результат которого всегда должен быть пустым». Таким образом, такой запрос, например, даст вам что-то вроде «все пары отдельных строк, имеющих одинаковое значение ключа», или, вообще говоря, такой запрос даст вам список «всех неправильных вещей».
Запишите запросы / сценарии со скоростью один на каждое нарушенное ограничение и выполняйте их в одночасье. Проверьте, не возвращает ли какой-либо из них непустые результаты.