Как создать схему схемы очень большой базы данных (SQL Server)
У меня есть очень большая база данных, мне нужно построить диаграмму. База данных - SQL Server 2008 на платформе x64. Он большой в том смысле, что существуют сотни связанных таблиц, каждая из которых содержит до 2000 полей (некоторые из которых являются разреженными), множественные взаимосвязи между таблицами (на самом деле сотни на одну таблицу), несколько схем... Вы понимаете.
Я попытался использовать функцию "Диаграммы базы данных" в SQL Server Management Studio, но она вызвала ошибку Win32Exception: "Недостаточно памяти для обработки этой команды..."
Я пытался использовать функцию обратного инжиниринга Visio на другом компьютере, чтобы подключить и построить схему, но это продолжалось в течение нескольких часов без признаков завершения.
Сценарии для создания этой гигантской схемы создаются с помощью инструмента, который мы создали для этой работы. В то время как инструмент отлично справляется со своей работой, сложно визуализировать его результаты.
Я ищу инструмент, чтобы вывести диаграмму этой базы данных, чтобы мы могли это сделать. Какие-либо предложения?
РЕДАКТИРОВАТЬ: просто чтобы подчеркнуть, что диаграмма действительно не должна использоваться для реальной полезной ссылки. Это устройство управления взаимоотношениями с клиентами, демонстрирующее сложность / масштаб системы.
8 ответов
Создание любого вида изображения для базы данных такого размера просто превращается в конфету, которая застревает на стене, которая задыхается, и, честно говоря, не служит никакой реальной цели, кроме случайных взглядов. Почему бы не использовать такой инструмент, как инструмент документирования Red Gate, который будет служить реальной цели? Пожалуйста, поймите, я не говорю это насмешливо, но я шел по этому пути, прежде чем пытаться построить диаграмму огромной базы данных, и мне это в какой-то степени удалось, но я так и не нашел хорошего выхода, где это было бы полезно.
Я работал в месте, где было несколько сотен столов (около 1 тыс.), И никто действительно не знал, что происходит в системе, компания росла и нанимала много людей. Парню было поручено составить диаграмму, и он автоматически создал гигантский плиточный плакат, на котором были все столы с линиями, соединяющими разные столы (повсюду). Я не уверен, что он использовал, это были Unix и Oracle много лет назад (задолго до Linux и с открытым исходным кодом). Не было никакой реальной рифмы или причины для расположения таблиц в его диаграмме. Он успешно создал диаграмму каждой таблицы. "Плакат" был вывешен на стене в общей зоне и несколько раз осматривался, но никто никогда не использовал его, он был непригоден, слишком загроможден, слишком неорганизован. В результате я использовал MS-Word для создания одностраничной диаграммы, содержащей 20 основных таблиц (она прошла несколько итераций, пока я "обнаружил" новые основные таблицы) со строками для каждого внешнего ключа и каждой таблицы, расположенной логическим образом., Я показал имя столбца, тип данных, обнуляемость, PK и все FK. Я положил свою диаграмму на стену рядом с монитором. В конце концов, все хотели получить копию моей схемы, включая человека, который сделал "постер". Когда я ушел с работы, они все еще передавали мою диаграмму новым сотрудникам.
Я рекомендую вам работать как исследователь, находить таблицы ключей и отображать их по мере необходимости, составляя столько конкретных диаграмм, сколько необходимо для обнаружения системы. Попытка сделать гигантский "плакат" автоматически не будет работать очень хорошо.
Поскольку у вас есть несколько схем, возможно, хорошей идеей будет вместо этого генерировать диаграммы для каждой схемы.
Используйте графвиз. Используйте некоторые операторы SQL для генерации диграммы, затем запустите ее через dot.exe для генерации PDF или PNG.
Я использовал его для генерации диграмм данных в таблицах SQL Server. Нет причин, почему вы можете использовать его для таблиц тоже.
Существуют также утилиты java, silverlight и AJAX для навигации по очень крупным графикам, поскольку PDF предназначен только для одной страницы.
IntelliJ (в частности IDEA, как только что попробовал с этим, но я полагаю, что их другие IDE предлагают эту функцию https://www.jetbrains.com/) имеет встроенную клиентскую базу данных, отсюда вы можете подключиться к вашей базе данных и анализировать отдельные таблицы, конкретную комбинацию или таблицу или все ваши таблицы, выделив нужные таблицы, щелкнув правой кнопкой мыши и выбрав опцию "диаграмма". Вы можете сохранить для дальнейшего использования, а также распечатать. Я только что попробовал это на большой БД из 500+ таблиц, и она визуализировалась за считанные секунды, векторная диаграмма служит альтернативным способом визуального анализа структур базы данных, а также отношений и ограничений между определенными таблицами, но не рекомендуется для печати.
FWIW, предполагая, что вы действительно хотите продолжить это, я лично обнаружил, что модельер баз данных visual studio 2010 выполняет самые хорошие диаграммы, с которыми я когда-либо сталкивался - просто импортируйте вашу базу данных, как если бы вы собирались использовать ее для Linq2SQL
Я бы не стал делать все это на одной диаграмме. Как вы упомянули, инструменты дают сбой, и, вероятно, невозможно легко понять диаграмму с сотнями таблиц с потенциально тысячами записей на таблицу. Можете ли вы генерировать диаграммы меньших логических областей с некоторым перекрытием других логических областей?
С другой стороны, вы можете попробовать использовать что-то вроде graphviz для разбора операторов DDL и затем создать график. Возможно, он будет колебаться какое-то время, но я помню, как видел в университетских диаграммах размером с постер с крошечным шрифтом, которые, вероятно, были той же сложности, что и ваша. Удачи!
schemaspy предоставляет удобный интерфейс для создания интерактивных диаграмм, которые охватывают несколько схем, используя graphviz в качестве бэкэнда. Я никогда не пробовал что-либо на этом размере, хотя.