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

Вниз

Изменение структуры БД   Найти похожие ветки 

 
Unknown_user   (2011-01-19 10:17) [0]

Вопрос скорее теоретический, чем практический.

Есть некая структура реляционной БД, есть клиентское приложение, которое умеет с ней работать. Пользователи накапливают данные в этой базе. Затем возникает необходимость поменять ее структуру. Добавляются новые таблицы, добавляются поля в существующие таблицы, добавляются внешние ключи и индексы. Клиентское приложение соответствующим образом модифицируется.

Вопрос.

Как перенести данные из предыдущих версий БД в актуальную версию, если учесть, что структура БД меняется часто. Например, как перейти от версии БД 1.0 к 1.5 или 1.3 к 1.5 (в первом случае структура БД менялась 6 раз, во втором 3 раза). Неужели нужно при каждом изменении схемы БД закладывать в клиента процедуры переноса данных и хранить их для каждого инкремента версии от 1.0 к 1.1, от 1.1 к 1.2 и т.д? Есть более рациональный способ?


 
Ega23 ©   (2011-01-19 10:25) [1]

Патч-скрипт. Или система патч-скриптов.


 
Медвежонок ХМЛ ©   (2011-01-19 10:47) [2]

Как перенести данные из предыдущих версий БД в актуальную версию

Зачем?
Меняй структуру рабочей БД и не надо ничего никуда переносить.


 
ANB   (2011-01-19 11:04) [3]

alter наше все


 
Проходимец   (2011-01-19 11:48) [4]

> структура БД меняется часто

Тогда самое правильное решение - уволить проектировщиков.


 
KSergey ©   (2011-01-19 12:12) [5]

Как уже писали - необходимо делать систему патч-скриптов.
Все их делают, так что не надо думать, что вы отскочите по-простому :)

Желательно очень стараться, чтобы отдельные патч-скрипты были атомарны и по возможности независимы, это очень упростит жизнь саппортерам.

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

Если на примере. Если хотим точно и гарантированно устанавливать патчи последовательно, то каждый update-SQL-скрипт надо оформить, например,  по такому шаблону:

SET @cur_patch_ver = 15
IF (SELECT MAX(installed_patch_num) FROM tbl_sql_patches) < (@cur_patch_ver-1) THEN
BEGIN
     HALT("Сначала необхордимо установить патч с номером " + (@cur_patch_ver-1))
END

BEGIN TRAN

-- здесь тело собственно атомарного update-скрипта номер 15
...
...
IF @@ERRORS_COUNT > 0 THEN
BEGIN
     ROLLBACK TRAN
     HALT("ERROR!")
END

-- сохраним признак установленности текущего патча
INSERT INTO tbl_sql_patches (installed_patch_num) VALUES (@cur_patch_ver)

COMMIT TRAN


Синтаксис условный, сорри, SQL-скрипты не пишу давно.


 
KSergey ©   (2011-01-19 12:14) [6]

> Проходимец   (19.01.11 11:48) [4]
> > структура БД меняется часто
> Тогда самое правильное решение - уволить проектировщиков.

Вообще-то структура БД, как правило, меняется от версии к версии продукта постоянно во всех проектах, где я участвовал.
Так что предлагаемое вами решение и его мотивы мне не понятны.


 
Anatoly Podgoretsky ©   (2011-01-19 12:25) [7]

> Unknown_user  (19.01.2011 10:17:00)  [0]

Вообще то не мешало бы иметь СУБД


 
KSergey ©   (2011-01-19 15:41) [8]

> KSergey ©   (19.01.11 12:12) [5]

Блин, в пример я совсем забыл добавить проверку на то, что данный патч уже установлен!
тогда ничего делать не надо, понятно
Просто выйти с нотификацией (без ошибки)


 
MsGuns ©   (2011-01-19 16:14) [9]

>Проходимец   (19.01.11 11:48) [4]
>Тогда самое правильное решение - уволить проектировщиков.

Толпу народа надо увольнять. Причем народа очень грамотного :)


 
Юрий Зотов ©   (2011-01-19 16:18) [10]

Изменение структуры БД может быть вызвано разными причинами. Но кто мне скажет, почему такая необходимость возникает часто?


 
Игорь Шевченко ©   (2011-01-19 16:19) [11]


> Но кто мне скажет, почему такая необходимость возникает
> часто


Бизнес не стоит на месте


 
Ega23 ©   (2011-01-19 16:25) [12]


>  Но кто мне скажет, почему такая необходимость возникает
> часто?

Часто - понятие относительное. Раз в полгода - это часто? Раз в месяц? В неделю?


 
12 ©   (2011-01-19 16:33) [13]

А заменить хранимку - изменение структуры БД?


 
Ega23 ©   (2011-01-19 16:37) [14]


> А заменить хранимку - изменение структуры БД?

Скорее да чем нет. Впрочем, философский вопрос. Ежели select из хранимки СУБД разрешает делать, а возвращаемый результат поменялся - то изменение структуры. Если просто в логике работы - то, вроде как, структура не затрагивается.


 
wicked ©   (2011-01-19 18:35) [15]


> > А заменить хранимку - изменение структуры БД?
>
> Скорее да чем нет. Впрочем, философский вопрос. Ежели select
> из хранимки СУБД разрешает делать, а возвращаемый результат
> поменялся - то изменение структуры. Если просто в логике
> работы - то, вроде как, структура не затрагивается.

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

в противном случае - можно считать, что менялась внутренняя логика


 
Johnmen ©   (2011-01-19 19:51) [16]


> Проходимец   (19.01.11 11:48) [4]
>
> > структура БД меняется часто
>
> Тогда самое правильное решение - уволить проектировщиков.
>

Полностью согласен, не смотря на грамотность народа...
ЗЫ
В чьей грамотности можно вполне усомниться.


 
картман ©   (2011-01-19 22:42) [17]


>  Johnmen ©   (19.01.11 19:51) [16]
>
>
> > Проходимец   (19.01.11 11:48) [4]
> >
> > > структура БД меняется часто
> >
> > Тогда самое правильное решение - уволить проектировщиков.
>
> >
>
> Полностью согласен, не смотря на грамотность народа...
> ЗЫ
> В чьей грамотности можно вполне усомниться.

не согласен, судя по:

> Добавляются новые таблицы, добавляются поля в существующие
> таблицы, добавляются внешние ключи и индексы. Клиентское
> приложение соответствующим образом модифицируется.

расширяется функционал приложения, потому об ошибках проектирования вряд ли можно говорить.


 
Юрий Зотов ©   (2011-01-20 03:36) [18]

> картман ©   (19.01.11 22:42) [17]

Если все изменения БД состоят лишь в том, что "добавляются новые таблицы, добавляются поля в существующие таблицы, добавляются внешние ключи и индексы", то очевидно, что все это элементарно делается скриптами и тогда непонятно, откуда вообще появился сабж.

Тем не менее, он появился - значит, речь может идти и о более серьезных изменениях, причем частых. А вот это уже сильно похоже именно на ошибки проектирования.


 
KSergey ©   (2011-01-20 07:08) [19]

Какие все умные и безгрешные здесь, оказывается.
Ну и телепаты наконец-то вернулись из отпуска.

Неизвестный юзер, ты хоть здесь появишься исчё еще нет?


 
DiamondShark ©   (2011-01-20 11:17) [20]


> Какие все умные и безгрешные здесь, оказывается.

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


 
Unknown_user   (2011-01-21 21:57) [21]

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

В изменении структуры БД виноваты не проектировщики, а заказчики. Не выдав окончательных требований (полного ТЗ) они уже хотят видеть работающее приложение. Нас такая ситуация сильно раздражает, но поделать ничего не можем. И изменения структуры БД действительно частые (бывает и по несколько раз в неделю) и не всегда лишь в сторону расширения функционала.


 
boriskb ©   (2011-01-21 22:12) [22]


>...  но поделать ничего не можем.


В том то и беда, что и не надо ничего делать.
Так их вечно доить можно за "доделку/переделку"
Если же это все делается бесплатно - в рамках суммы договора, то ССЗБ



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

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

Наверх





Память: 0.51 MB
Время: 0.032 c
3-1258364954
DelphiN!
2009-11-16 12:49
2011.05.08
Проверка корректности даты в TSQL


2-1295938268
Василий21
2011-01-25 09:51
2011.05.08
Таймер чужой программы и HOOK


15-1295990985
Юрий
2011-01-26 00:29
2011.05.08
С днем рождения ! 26 января 2011 среда


2-1296648381
NieL
2011-02-02 15:06
2011.05.08
Сформировать список


2-1296057400
Kirilovich
2011-01-26 18:56
2011.05.08
Сетевая Бд





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский