Ну, вы можете запросить метаданные - INFORMATION_SCHEMA.COLUMNS
- отфильтровать вещи, которые вряд ли будут объединены в ключи - например, TEXT / NVARCHAR (MAX). Поместите его в какую-нибудь таблицу словаря данных, где вы начнете помечать столбцы информацией.
Вы можете делать запросы с такими вещами, как:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS AS C
INNER JOIN INFORMATION_SCHEMA.TABLES AS T
ON C.COLUMN_NAME = T.TABLE_NAME + '_ID';
чтобы увидеть, есть ли очевидные совпадения.
Это может помочь вам разобраться с базой данных. Но это займет много работы.
Без ограничения внешнего ключа даже возможно, что они сделали такие вещи, как «мультиключи», где определенный столбец является внешним ключом к той или иной таблице, в зависимости от типа селектора типа (это невозможно с ограничениями внешнего ключа) - возможно, вы даже не увидите этого в профилировщике, кроме как между отдельными объединениями - поэтому однажды вы можете увидеть его присоединение к одной таблице, а иногда и к другой.