Найти все связанные объекты в базе данных

Есть следующий кейс: пользователь удаляет в системе некоторую сущность, на которую в системе имеются ссылки, например:

Имеются два справочника (таблицы в базе):

Addresses: ID, Title
Territories: ID, Name, AddressId

При удалении адреса пользователь должен получить предупреждение о том, что данный адрес используется в справочнике территорий в строке с ID таким-то.

Это должно работать на уровне всей системы. То есть имеется множество справочников, они ссылаются друг на друга через Foreign Key, и при удалении какого-либо элемента из справочника пользователь получает уведомление, что на данный объект ссылаются следующие объекты: [Справочник такой-то; ИД объекта в справочнике такой-то].

На уровне базы данных добавлены constraints, чтобы не нарушалась целостность данных.

В настоящий момент момент нашёл такой скрипт, который возвращает

INSERT INTO @ref (PK_Table, PK_Column, FK_Table, FK_Column)
SELECT PK_Table = PK.TABLE_NAME, PK_Column = PT.COLUMN_NAME, FK_Table = FK.TABLE_NAME, FK_Column = CU.COLUMN_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN (
    SELECT t1.TABLE_NAME, t2.COLUMN_NAME
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS t1
    INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE t2 ON t1.CONSTRAINT_NAME = t2.CONSTRAINT_NAME
    WHERE t1.CONSTRAINT_TYPE = 'PRIMARY KEY'
    ) PT ON PT.TABLE_NAME = PK.TABLE_NAME

Скрипт возвращает данные в следующем виде:

введите сюда описание изображения

То есть на таблицу BusinessCardRequests (поле [ID]) ссылаются две таблицы: BusinessCardOrderRequests, BusinessCardRequestStatuses (поле [RequestId]).

Далее на основе этих данных пытаюсь динамически построить скрипт, который вернет нужные данные, например в следующем виде:

То есть на объект из таблицы BusinessCardRequests, например, с ИД = 10 ссылаются следующие объекты в таблицах:

введите сюда описание изображения

Есть идеи как это можно сделать проще и лучше?


Ответы (0 шт):