Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Вниз

Доработка базы как правильно поступить???   Найти похожие ветки 

 
Андрей Пл   (2007-12-25 17:19) [0]

Как поступают когда надо доработать существующую прогу и ее рабочую базу. Т.е. я беру у заказчика исходники и копию базы (в которую надо тоже внести изменения добавить поля создать доп таблицу и тригеры). Так вот с прогой проблем нет: доделал и базу изменили но в рабочей базе с того момента как я взял копию уже добавлена новая информация. Как поступают в таких случаях??? т.е. я не могу тупо прийти и заменить моей доработанной базой т.к. у заказчика потеряеться информация, что делать как правильно в таких случаях поступают?


 
Andrey ©   (2007-12-25 17:24) [1]

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


 
kaif ©   (2007-12-25 17:26) [2]

Я в таких случаях пишу специальное (для себя) приложение для перекачки данных из старой базы в новую. Дельфи для таких задач - превосходный инструмент.


 
Kolan ©   (2007-12-25 17:26) [3]

> [1] Andrey ©   (25.12.07 17:24)

Только перед этим надо сделать бэк ап&#133


 
Andrey ©   (2007-12-25 17:32) [4]

>Kolan ©
Вторая строка, 5-6 слово )


 
Kolan ©   (2007-12-25 17:43) [5]

> Вторая строка, 5-6 слово )

Да проглядел&#133

Кроме того скрипты хорошо собирать, чтобы если ты сделал два апгрйеда(0 —> 1 —> 2, цифры — версии БД), то всегда была возможность проапгрейдить как базу в версии 0 так и в версии 1.


 
Sergey13 ©   (2007-12-26 10:00) [6]

> [2] kaif ©   (25.12.07 17:26)

Такое, ИМХО, пройдет только для небольших и несложных баз. Кроме того желательно быть автором этой БД. Иначе вероятность, что что-то пропустил и не скопировал очень велика.

+ к
> [1] Andrey ©   (25.12.07 17:24)

Существует масса инструментов для разных СУБД, генерирующих такой скрипт автоматом.


 
Desdechado ©   (2007-12-26 11:20) [7]

> Существует масса инструментов для разных СУБД, генерирующих
> такой скрипт автоматом.
Э-э, тут важна последовательность применения изменений. Особенно при наличии данных в БД, чтоб все сохранилось и не вступало в противоречие друг с другом. Не видел такой автоматики.


 
Sergey13 ©   (2007-12-26 11:39) [8]

> [7] Desdechado ©   (26.12.07 11:20)

Получить скрипт различий 2 баз можно автоматически. Про автоматически его применять на боевой БД я не писал. 8-)
Зато такие инструменты ничего не забывают.


 
Desdechado ©   (2007-12-26 12:25) [9]

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


 
Sergey13 ©   (2007-12-26 12:37) [10]

> [9] Desdechado ©   (26.12.07 12:25)

Я имел в виду скрипт различий метаданных, т.е. структуры. Естественно что куда перезаливать тут надо конкретно думать.


 
kaif ©   (2007-12-26 15:29) [11]

Могу рассказать, как делается модификация структуры ядра базы данных в моей системе Allegro, к примеру. Имеется таблица с одной строкой, в которой лежит номер "версии ядра". Ядром называются системные таблицы Allegro (дело в том, что там еще имеются и пользовательские таблицы и таких очень много). Когда Allegro обращается к базе данных, оно смотрит номер "версии ядра". Если этот номер 9, а текущий номер версии Allegro 12, то вызывается некая DbUpdate.dll, которая последовательно применяет преобразования 9->10, 10->11, 11->12. Каждое преобразование состоит из ряда SQL-команд (плюс иногда некоторого программного кода). То есть в моей DbUpdate.dll имеется функция "кумулятивного апдейта"

boolean UpdateDbVersion(FromVersion, ToVersion: integer);

которая последовательно вызывает функции типа:

boolean UpdateDbVersion9_10;
boolean UpdateDbVersion10_11;
boolean UpdateDbVersion11_12;
...
----------------------------
После релиза очередной версии, я больше не трогаю ни одну функцию. Если где-то была ошибка, исправляю в следующей версии (12->13).
----------------------------
Собственно, важно лишь одно: не забывать, какие изменения уже были применены к базе, а какие еще нет.

Поэтому рекомендую ввести номер версии в базу данных.
Мало ли?
Вдруг еще придется что-то менять.

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

Не знаю, имеет ли смысл говорить о версии, если база всего одна. Но не исключено, что имеет смысл даже в этом случае. Мало ли? Бекапы тоже могут быть разной давности. А вдруг какой-то из них понадобится?

Не знаю, понятно ли объяснил идею последовательных апдейтов  с нумерацией версий...


 
data ©   (2007-12-26 15:50) [12]


> Поэтому рекомендую ввести номер версии в базу данных.
> Мало ли?
> Вдруг еще придется что-то менять.
>
> Это особенно актуально, если у разных пользователях на руках
> могут оказаться разные версии одной и той же базы данных,
>  а последняя версия приложения может работать только с последней
> версией и нужно у всех как-то обновить структуру всех баз.
>


очень полезный совет, неоднократно провереный на моем опыте.


 
Desdechado ©   (2007-12-26 15:51) [13]

> kaif ©   (26.12.07 15:29) [11]
У нас аналогично, вроде, за исключением того, что программа апдейтер ничего не знает о структуре БД, кроме таблицы с версиями и таблицы с пакетами обновления. При обнаружении очережного обновления она загоняет его в БД в блоб, а потом последовательно выполняет скрипты из него, даже если нужно переконнектиться, просто запоминается в БД, какие SQL уже выполнены, а с какого нужно продолжить. После окончания выполнения пакета устанавливается очередная цифра в таблицу версий.


 
Andrey ©   (2007-12-27 09:53) [14]

У меня была ситуация немного сложнее. Начальство очень сильно прогибалось под заказчиков и если заказчики требовали какой-то функционал завтра, он должен был у них появиться завтра. При этом баз было не 1 и не 2, а около 20-25. Биллинг для мелки операторов (телефония и инет) это был.

Как делали мы. Команда из 4 человек. Мы выпускали официальные апдейты базы и клиента примерно раз в 2-3 месяца.

Был каталог в котором лежал полный скрипт меняющий структуру базы из версии, допустим, 2 в 3. На основании его формировался апдейт. Ну вобщем дальше всё как обычно, тесты, хотфиксы, крики, маты, хотфиксы -> готовый апдейт который можно применить к базе клиента для перевода ее из версии 2 в 3... короче пормальная рабочая обстановка.

Про прогибающееся начальство и версию базы 2+.
Как я говорил, "если заказчики требовали какой-то функционал завтра, он должен был у них появиться завтра". И он обычно появлялся. Как это достигалось: в файлы со скриптом апдейта мы выкладывали цельные логические блоки скрипта (допустим включение фастрепорта было оформлено в создание 2-3 таблиц ну и еще по мелочи, и в скрипте оно появилось цельным куском, когда было закончено и оттестировано разработчиком).
Плюс ко всему эти блоки всегда были безопасны для многоразового применения. Тоесть прогнав один и тот же блок 2 раза нельзя было испортить логику базы. Да, иногда для этого надо было писать дополнительный код типа запросов к системным таблицам и т.д., но таков был корпоратывный стандарт. Чисто информативно мы в скрипте иногда ставили пометки типа:
------- ^^^ Дядя Вася
Сие значило, что до сего момента скрипт был накачен дяде васе и если он еще захочет чего-то странного до апдейта, можно накатывать только то что идет ниже.
С клиентским местом было примерно так же. Собирался последний билд на текущий момент, его и отдавали заказчику. Без жесткого тестирования.

Конечно в результате общая надежность системы падала хотябы потому что "написать" и "написать и оттестировать" это сильно разные вещи, но это лучшее что мы изобрели для "мгновенного" введения фунуционала.

Мне, как разработчику такая схема не по душе... Но если она есть и приносит не кислый доход, почему бы и нет )



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.061 c
15-1198777130
Petr V. Abramov
2007-12-27 20:38
2008.02.03
про спам


2-1199868237
DevilDevil
2008-01-09 11:43
2008.02.03
Почему может возникать неправильная максимизация ?


6-1179280426
Ш-К
2007-05-16 05:53
2008.02.03
Изменения в TWebBrowser


6-1176297172
mm0
2007-04-11 17:12
2008.02.03
Помогите с отправкой sms


3-1190804341
Vazhik
2007-09-26 14:59
2008.02.03
Псевдоним БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский