Неопределенная связь (внешний ключ) в базе данных SQL Server - PullRequest
0 голосов
/ 16 февраля 2012

Я работаю с базой данных SQL Server, которая содержит почти 850 таблиц.У этого есть много определенных отношений и много неопределенных отношений (FK), неопределенных первичных ключей и т. Д. Это беспорядок.У меня нет доступа к исходному коду приложения, поэтому я не могу отследить неопределенные отношения с помощью кода.

Существует ли какое-либо программное обеспечение или запрос, по которому я могу просто посмотреть на данные и выяснить отношения между таблицами?Чтобы быть более точным, все поля (столбцы) в каждой таблице сопоставляются (объединяются) со всеми столбцами всех других таблиц и предоставляют мне отчет некоторого вида.Почти в 60% случаев имена столбцов будут похожими в связанных таблицах, но многие таблицы имеют одинаковое имя столбца для первичного ключа (например, item_id).

Мне нужны все эти неопределенные отношения, которые делают мою жизнь несчастной каждый день !!(

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Я думаю, что вам лучше всего использовать профилировщик, чтобы зафиксировать выполняемые операторы и попытаться вывести отношения из этого.Это сложный вопрос, и нет простых решений, о которых я знаю.

Удачи!

1 голос
/ 16 февраля 2012

Ну, вы можете запросить метаданные - 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';

чтобы увидеть, есть ли очевидные совпадения.

Это может помочь вам разобраться с базой данных. Но это займет много работы.

Без ограничения внешнего ключа даже возможно, что они сделали такие вещи, как «мультиключи», где определенный столбец является внешним ключом к той или иной таблице, в зависимости от типа селектора типа (это невозможно с ограничениями внешнего ключа) - возможно, вы даже не увидите этого в профилировщике, кроме как между отдельными объединениями - поэтому однажды вы можете увидеть его присоединение к одной таблице, а иногда и к другой.

...