Обновление части базы данных при обновлении приложения

#c #sql #qt #sqlite #installation

#c #sql #qt #sqlite #установка

Вопрос:

Я разрабатываю приложение на C (Qt) и SQLite. Приложение установлено с предопределенной базой данных, заполненной некоторыми записями. Пользователь имеет возможность расширять базу данных своими собственными записями. Мне интересно, как добиться обновления приложения, т. Е. Когда устанавливается новая версия приложения, я хочу удалить старые основные (предопределенные) записи в базе данных и заменить (вставить) новые. Возникают эти вопросы:

  • Должен ли я использовать 2 базы данных с аналогичной схемой, одну из которых можно изменять для пользователя, а вторую предопределенную только для чтения (таким образом, обновление приложения будет просто копировать новую предопределенную базу данных поверх старой)?
  • Или у меня должен быть столбец в базе данных об авторе (приложении или пользователе), и каким-то образом (и как?) при обновлении удалять старые записи приложения и вставлять новые?

Есть идеи? Спасибо

Ответ №1:

Есть третий вариант:

  • Сохраните исходные таблицы так, как они нужны для приложения.
  • Для каждой таблицы: добавьте вторую таблицу, состоящую всего из одного столбца.
  • Эти столбцы ссылаются на PKS ваших «реальных» таблиц.
  • Затем вставьте ключи ваших записей по умолчанию в новые таблицы.
  • Во время обновления просто соедините соответствующие таблицы и удалите, затем вставьте снова.

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

Если вам не нужны дополнительные таблицы, я бы посоветовал использовать второй вариант. Первый из них заставил бы вас выполнять ваши запросы дважды и UNION их. Это просто звучит неправильно для меня.

Ответ №2:

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

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