0

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

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

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

+0

Согласен с текущими 2 и (возможно) всеми последующими ответами. Это проблема «джинна»: как только вы позволите джинну из бутылки (без декларативной ссылочной целостности), ужасно сложно вернуть его в бутылку. –

ответ

2

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

Good Luck

+0

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

1

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

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

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

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

+0

Спасибо, Кейд. Я уже пробовал все, что мог, с совпадением имени столбца и выяснил максимальные отношения. Но я хочу привести данные в картину. Например, таблица A внутренняя ссылка на таблицу B на a.product_id (int) = b.item_id (varchar (10), имя столбца отличается, но данные знакомы. Я хотел бы присоединиться к одному столбцу ко всем столбцам в 850 таблицах и сделайте это для всех столбцов в базе данных. Я просто могу сделать это с помощью какого-то инструмента. –

+0

@need_the_buzz. Вы могли бы конечно создать код для сравнения всех подобных полей типа данных и получить подсчеты с каждой стороны и количество совпадений, но не инструмент, о котором я знаю. –

Смежные вопросы