Юрий17 августа 2019 г. 12:54
Как правильно отслеживать актуальность базы данных
Добрый вечер.
Подскажите как правильно синхронизировать структуру БД? С другим рабочем местом.
БД MySQL.
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
SH
- Sak Hax
- 25 апреля 2024 г. 14:00
C++ - Тест 001. Первая программа и типы данных
- Результат:33баллов,
- Очки рейтинга-10
l
- laei
- 23 апреля 2024 г. 9:19
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:10баллов,
- Очки рейтинга-10
Последние комментарии
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий Кононенко5 февраля 2024 г. 1:50
EVA25 декабря 2023 г. 10:30
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
DA
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
Dr Gangil Academics20 апреля 2024 г. 7:45
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев14 апреля 2024 г. 2:35
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
Не очень понятен вопрос. База одна или их несколько?
База одна.
Как отслеживать структуру в самой БД и той которая в приложении.
Обратился я к таблице, а ее нет в данной версии БД и приложение упало.
Сейчас я использую MySQL Workbench, создаю EER model и потом синхронизирую структуру БД где мне нужно, но вот хотелось бы автоматом проверять совместимость БД с приложением.
Надеюсь правильно изложил мысль.
Т.е. таблицы в БД к которым обращается приложение могут отсутсвовать?
Все верно.
Программно можно проверить существование таблицы, получить список таблиц БД, получить список полей конкретной таблицы и т.д. Это все на совести программиста и если структура БД может меняться, то такие проверки необходимо делать до обращения к таблицам, чтоб приложение не падало.
Список таблиц в Qt: QSqlDatabase::tables(...)
У нас в проекте создана таблица, в которой вносятся версии базы данных, в зависимости от версии используется соответствующая логика.
В случае с Django, например, имеется таблица миграций, и каждая запись соответствует миграционному файлу. Автоматически делается проверка на структуру базы данных, и если есть изменения, то нужно применить новые миграции.
Ещё как вариант, то дополнительно прикрутить REST API к серверу базы данных и отдавать данные в виде JSON структур. Их будет проще распрасить, чтобы приложение не падало.
думаю что-то подобное)))
Тут только получим сами таблицы, а колонки и тип данных. Таблицы не так часто меняются, а вот тип данных и колонки очень даже часто.
Вам нужно вести версионирование базы данных и в зависимости от версии использовать соответсвующую логику. Иначе никак. У нас на проекте тоже имеется проблема с версионированием в базе данных. Просто создали таблицу, которая содержит версию, и в зависимости от версии либо конвертируем поля, либо ничего не делаем, то есть игнорируем логику, либо делаем ещё что-то, что требуется.
То есть однозначно нужна таблица с версией базы данных.
Естественно, что это хорошо работает в том случае, если приложение последней версии открывает базу данных старшей версии или той же самой.
Старое приложение откроет новую базу данных скорее всего с ошибками. Либо после проверки предлагать обновление и ничего не делать.
У нас реализовано так что при запуске программа проверяет версию БД (естетсвенно она хранится в таблице) если версия БД младше то выполняется обновление бд. На каждую новую версию если изменяется структура БД создается sql файл со скриптами которые и зменяют БД 20190806_update_tanks.sql например. И программа последовательно выполняет скрипты для модификации БД и только потом запускается.
Если Вы разрабатываете какую-то универсальную утилиту, которая вообще не привязана к логике, тогда как вариант:
1. Получить список таблиц через QSqlDatabase::tables
2. Для каждой таблицы получить список столбцов, например так:
Но вариант Евгения правильнее и логичнее если ПО делается под конкретную БД.
В принципе я так и делаю, у меня есть таблица с номером текущей версии БД.
При запуске приложения происходит проверка версии БД поддерживаемой приложением.
Потом получаю данные в Json формате с сайта и проверяю на новые версии.
Если вышла новая версия, предлагаю обновиться и запускаю стандартный интерфейс (QtIFW) обновления из репозитория.
Спасибо, расказали подробно.