powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как можно выполнять действия для SQLlite: сравнение схем, обновление, генерация скриптов
3 сообщений из 3, страница 1 из 1
Как можно выполнять действия для SQLlite: сравнение схем, обновление, генерация скриптов
    #39140747
OllyM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На данный момент в моем приложении используется MS SQL. в проекте на c# (net 3.5) есть проект базы данных. при необходимости изменения структуры бд, изменяется структура в этом проекте,затем выполняется SchemaCompare, с помощью которой можно обновить рабочую базу, плюс SchemaCompare генерирует скрипты, которые встраиваются в инсталятор, выполняются на машине клиента при обновлении ПО и обновляют базу клиенту. Теперь встал вопрос о переходе на какую-нибудь встроенную СУБД, поддерживающую представления (Views). Пока что выбор пал на SQLite (но он не окончательный). Так вот суть проблемы. Как и с помощью каких средств можно выполнять аналогичные действия для SQLlite (сравнение схем, обновление, генерация скриптов). Или подскажите, пожалуйста, какую-нибудь другую ВСТРОЕННУЮ субд и инструменты, с помощью которых можно достичь поставленных задач. Спасибо!
...
Рейтинг: 0 / 0
Как можно выполнять действия для SQLlite: сравнение схем, обновление, генерация скриптов
    #39140821
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По хорошему, надо уволить того кто придумал эту процедуру разработки с волчьим билетом.
Базу изначально надо держать в скриптах и только в скриптах. Прямое изменение структуры базы это большой идиотизм.

А по сути вопроса: любая СУБД тебе подойдет, абсолютно любая. Просто возьми себе какой-нибудь data modeling инструмент типа Power Designer или ERwin и все проблемы отпадут.
...
Рейтинг: 0 / 0
Как можно выполнять действия для SQLlite: сравнение схем, обновление, генерация скриптов
    #39140967
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OllyM,

В sqlite нет красивых компараторов схемы.
да и не помогут они в общем случае
если идет активная разработка также обновление версии не всегда DDM операция с базой
иногда требуется провести модификцию данных( справочники или еще что-то).

Все патчи нужно тщательно тестировать и сохранять.
и никакой Power Designer или ERwin проблему не решает (ну окромя на ветер выкинутых денег учитывая их ценник :)
(например, у системы выбрана EAV модель хранения данных и там 3-5 статических таблиц которые никогда не меняются)

в sqlite для хранения версии базы есть PRAGMA user_version
У меня сделано так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
		const int l_rev = m_flySQLiteDB.executeint("select max(rev) from fly_revision");
		const int l_db_user_version = m_flySQLiteDB.executeint("PRAGMA user_version");
		if (l_rev < 322)
		{
			safeAlter("ALTER TABLE fly_file add column hit int64 default 0");
			safeAlter("ALTER TABLE fly_file add column stamp_share int64 default 0");
			safeAlter("ALTER TABLE fly_file add column bitrate integer");
			m_flySQLiteDB.executenonquery("delete from fly_file where name like '%.mp3' and (bitrate=0 or bitrate is null)");
		}
		if (l_rev < 358)
		{
			safeAlter("ALTER TABLE fly_file add column ftype integer default -1");
			sqlite3_transaction l_trans(m_flySQLiteDB);
			m_flySQLiteDB.executenonquery("update fly_file set ftype=1 where ftype=-1 and "
			                              "(name like '%.mp3' or name like '%.ogg' or name like '%.wav' or name like '%.flac' or name like '%.wma')");
			m_flySQLiteDB.executenonquery("update fly_file set ftype=2 where ftype=-1 and "
			                              "(name like '%.rar' or name like '%.zip' or name like '%.7z' or name like '%.gz')");
......
}
.......

		if (l_db_user_version < 1)
		{
			// fix https://github.com/pavel-pimenov/flylinkdc-r5xx/issues/18
			m_flySQLiteDB.executenonquery("update fly_file set ftype=1 where name like '%.wv'");
			m_flySQLiteDB.executenonquery("PRAGMA user_version=1");
		}
		if (l_db_user_version < 3)
		{
			if (safeAlter("insert into fly_queue_source(fly_queue_id,CID,Nick) select id,CID,nick from fly_queue where nick is not null", true))
			{
				safeAlter("update fly_queue set nick=null, cid=null, CountSubSource=null where nick is not null", true);
			}
			m_flySQLiteDB.executenonquery("PRAGMA user_version=3");
		}



Данный код встроен в само приложение.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как можно выполнять действия для SQLlite: сравнение схем, обновление, генерация скриптов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]