Обновление части базы данных при обновлении приложения - PullRequest
2 голосов
/ 27 апреля 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Существует третий вариант:

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

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

Если вы не хотите дополнительных таблиц, я бы сказал, сделать второй вариант.Первый заставит вас выполнить ваши запросы дважды и UNION.Мне это просто не подходит.

0 голосов
/ 27 апреля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...