170 likes | 373 Views
Генерация скрипта создания базы данных с учетом зависимостей. Автор: Максим Масунов, 545 группа Санкт-Петербургский государственный университет Математико-Механический факультет Кафедра системного программирования Научный руководитель: Графеева Н.Г. Рецензент: Помыткина Т.Б. Проблема.
E N D
Генерация скрипта создания базы данных с учетом зависимостей Автор: Максим Масунов, 545 группа Санкт-Петербургский государственный университет Математико-Механический факультет Кафедра системного программирования Научный руководитель: Графеева Н.Г. Рецензент: Помыткина Т.Б.
Проблема • Скрипты разложены по разным файлам • Скрипты находятся в одном текстовом файле Table1.sql Table1.sql Table1.sql Table1.sql Table1.sql Table1.sql Tables.sql Views.sql Triggers.sql DataBase.sql
Создание скрипта с учетом зависимостей DataBase Application Script.sql
Алгоритм создания объектов • Создание графа зависимостей • Порядок создания объектов • Поиск зависимостей • Топологическая сортировка • Проверка ацикличности • Обход графа с выводом результата
Порядок создания объектов Пользовательские типы … Таблицы … Индексы … Встроенные процедуры, функции, представления …
Поиск зависимостей Процедура_2 Представление_3 Независимые объекты Процедура_1 Процедура_3 1-й уровень зависимости Функция_1 2-й уровень зависимости k-й уровень зависимости
Проверка на ацикличность Процедура_3 Процедура_2 Процедура_1
Решение .NET DB2 UDB DLL GUI Скрипт создания всех объектов с учетом зависимостей
Задача, часть 2Синхронизация SQL-схем DataBase.sql Revision 58 Update DataBase.sql Revision 59
Средствами контроля версий • Не всегда удобно • Сравнивают строки, а не объекты • Не создают скрипта, а лишь показывают различия • Может не понять, если поменять местами два текстовых блока без обрамляющих “\n”.
Приложить резервную копию • Могут быть различные данные • Например, пользователи • Sample • 22таблицы по 20-30 записей • Резервная копия заняла 102 Мб
Решение .NET DLL DB2 Новая SQL-схема в XML формате GUI Скрипт-патч
Изменение схемы таблиц • Переименование колонок • Изменение размера колонок • Изменение типов колонок и приведение существующих данных к новому типу, используя встроенные скалярные функции • Изменение точности • Изменение значений поумолчанию • Изменение NULL/NOT NULL • Удаление колонок
Отличие от существующих • Для создания патча не требуется подключения к обеим базам данных • Достаточно файла с новой схемой и подключения к базе данных со старой схемой • Скрипт может быть выполнен, так как объекты выстроены в порядке, учитывающем зависимости • Код приложения полностью открытый
Результат • Проведено сравнение с существующими инструментами • Разработан алгоритм создания объектов с учетом зависимостей • Разработан алгоритм создания патчей • Реализована программная система • Работает на платформе .NET 3.5 • Использует DB2 Universal DataBasev 9.5
Спасибо за внимание! • Вопросы?