Как создать схему схемы очень большой базы данных (SQL Server)

Это старый поток, но он все еще находится в верхней части результатов поиска, поэтому я добавляю свое решение, используя std :: stringstream и простой метод замены строки Yves Baumes, который я нашел здесь.

Следующий пример будет читать файл по строкам, игнорировать строки комментариев, начинающиеся с //, и анализировать другие строки в комбинации строк, ints и double. Stringstream выполняет разбор, но ожидает, что поля будут разделены пробелами, поэтому я использую stringreplace, чтобы сначала включить запятые в пространства.

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

#include <string>
#include <sstream>
#include <fstream>

void StringReplace(std::string& str, const std::string& oldStr, const std::string& newStr)
// code by  Yves Baumes
// http://stackoverflow.com/questions/1494399/how-do-i-search-find-and-replace-in-a-standard-string
{
  size_t pos = 0;
  while((pos = str.find(oldStr, pos)) != std::string::npos)
  {
     str.replace(pos, oldStr.length(), newStr);
     pos += newStr.length();
  }
}

void LoadCSV(std::string &filename) {
   std::ifstream stream(filename);
   std::string in_line;
   std::string Field;
   std::string Chan;
   int ChanType;
   double Scale;
   int Import;
   while (std::getline(stream, in_line)) {
      StringReplace(in_line, ",", " ");
      std::stringstream line(in_line);
      line >> Field >> Chan >> ChanType >> Scale >> Import;
      if (Field.substr(0,2)!="//") {
         // do your stuff 
         // this is CBuilder code for demonstration, sorry
         ShowMessage((String)Field.c_str() + "\n" + Chan.c_str() + "\n" + IntToStr(ChanType) + "\n" +FloatToStr(Scale) + "\n" +IntToStr(Import));
      }
   }
}
16
задан tomfanning 17 August 2010 в 14:26
поделиться

6 ответов

Создание любого изображения для базы данных такого размера просто становится приятным глазу, которое застревает на стене, которая задыхается, и, честно говоря, не служит никакой реальной цели, кроме случайных взглядов. Почему бы не использовать такой инструмент, как Инструмент документации Red Gate , который будет служить реальной цели? Пожалуйста, поймите, я говорю это не насмешливо, но я шел по этому пути, прежде чем попытаться построить диаграмму огромной базы данных, и в какой-то степени мне это удалось, но я так и не нашел хорошего выхода, где он был бы полезен.

10
ответ дан 30 November 2019 в 21:02
поделиться

Используйте graphviz. Используйте некоторые операторы SQL для создания биграммы, а затем запустите ее через dot.exe, чтобы сгенерировать PDF или PNG.

Я использовал его для создания диграмм данных в таблицах SQL Server. Нет причин, по которым вы можете использовать его и для таблиц.

http://www.graphviz.org/

Существуют также утилиты java, silverlight и AJAX для навигации по очень большим графикам, поскольку PDF предназначен только для одной страницы.

2
ответ дан 30 November 2019 в 21:02
поделиться

Я работал в месте, где было несколько сотен столов (около 1k), и никто толком не знал, что происходит в системе, компания росла и нанимала много сотрудников. Парню было поручено нарисовать диаграмму, и он автоматически магическим образом создал гигантский плиточный плакат, содержащий каждую таблицу с линиями, соединяющими различные таблицы (идущими повсюду). Я не уверен, что он использовал, это были Unix и Oracle много лет назад (задолго до Linux и открытого исходного кода). В расположении таблиц на его диаграмме не было реальной рифмы или причины. Он успешно создал диаграмму каждой таблицы. «Плакат» был повешен на стене в общей зоне, и на него несколько раз смотрели, но никто никогда не использовал его, он был непригоден для использования, слишком загроможден, слишком неорганизован. В результате я использовал MS-Word для создания одностраничной диаграммы, содержащей 20 основных таблиц (она прошла несколько итераций, когда я «обнаружил» новые основные таблицы) со строками для каждого внешнего ключа и каждой таблицы, расположенной логическим образом. . Я показал имя столбца, тип данных, допустимость значений NULL, PK и все FK. Я повесил диаграмму на стену у монитора. В конце концов все захотели копию моей схемы, включая человека, который сделал «плакат». Когда я уволился с этой работы, они все еще передавали мою диаграмму новым сотрудникам.

Я рекомендую вам работать как исследователь, находить ключевые таблицы и отображать их по ходу дела, создавая столько конкретных диаграмм, сколько необходимо, по мере того, как вы откроете для себя систему. Пытаться сделать гигантский «плакат» автоматически не очень хорошо.

15
ответ дан 30 November 2019 в 21:02
поделиться

FWIW, предполагая, что вы действительно хотите продолжить, я лично обнаружил, что программа моделирования баз данных Visual Studio 2010 делает самые красивые диаграммы, с которыми я когда-либо сталкивался. Просто импортируйте свою базу данных, как если бы вы собирались ее использовать. для Linq2SQL

0
ответ дан 30 November 2019 в 21:02
поделиться

Поскольку у вас несколько схем, возможно, хорошей идеей будет вместо этого создавать диаграммы для каждой схемы

2
ответ дан 30 November 2019 в 21:02
поделиться

Я бы не стал делать все на одной диаграмме. Как вы упомянули, инструменты дают сбой, и, вероятно, невозможно легко понять диаграмму с сотнями таблиц с потенциально тысячами записей в таблице. Можете ли вы создать диаграммы меньших логических областей с частичным перекрытием с другими? логические области?

В качестве альтернативы вы можете попробовать использовать что-то вроде graphviz для анализа операторов DDL и построения графика. Вероятно, какое-то время он будет сбиваться, но я помню, как видел на университетских плакатах диаграммы с крошечным шрифтом, которые, вероятно, были той же сложности, что и ваша. Удачи!

0
ответ дан 30 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: