|
#1
|
|||
|
|||
Самообновление БД
Ребят решил сделать такую штуку. Самообновление структуры бд.
Есть такая проблема. С новой версией добавляются новые поля в таблички. А страрая версия будет выдавать ошибки. Чтоб этого избежать решил делать некий срез структуры новой бд в файле и при старте программы опрашивать если объекта (таблицы или поля) нет в этой версии бд, то создать его Посоветуйте как такое реализовать? |
#2
|
|||
|
|||
Зависит от БД.
В принципе, большинство БД позволяют получать данные об структуре из мета-данных. Названия таблиц/вью метаданныз и их структура зависят от БД. Ну а как добавлять/создавать таблицы/вью и др. объекты БД - это стандартный DDL, правда его придется генерить смостоятельно во время исполнения программы, что не так сложно. |
#3
|
|||
|
|||
Спасибо. Что такое ддл? И как с ее помощью осуществлять миграцию версий бд
|
#4
|
|||
|
|||
Data Definition Language - та чать SQL, предназначенная для работы со структурами данных - создание/изменени/удаление таблиц/вью/триггеров/etc.
Собственно, тебе надо считать из метаданных текущее состояние БД, сравнить его с требуемым (которое идет с новой версией программы), по разнице сгенерировать запросы для изменения БД и выполнить их. Например, у тебя есть в БД таблицы T1 (F1, F2) и T2 (F1, F2, F3). А для новой версии программы требуется: T1 (F1, F2, F3) и T2 (F1, F2, F3) и T3 (F1). Таким образом, тебе надо сгенерировать запрос на добавление поля F3 в таблицу T1, T2 трогать не надо, а еще надо создать таблицу T3. |
#5
|
||||
|
||||
А представляете что будет, когда вам потребуется сделать сравнение данных по таблице, структура которой менялась произвольно?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
Ну, тут просто накладывается "административное" ограничение - только добавляем поля и создаем новые таблицы. Тогда задача сильно упрощается.
|