如何将数据库与 Git 同时使用(或 à la Git)



我们目前使用JSON文件来存储配置系统所需的数据。我们使用 Git 作为版本控制系统。

我们不时手动填充这些 JSON:我们用于并发修改文本,例如,通过在数组中添加新元素并将更改提交到 Git。此外,由于 JSON 是纯文本格式的,Git 使我们在批准提交之前可以轻松地重新定基、创建或审查任何合并请求。

但是,我们基本上使用这些 JSON 作为所有配置的数据库。我们认为这不是最好的选择。例如,这些 JSON 中定义的(元素中的)结构之间存在大量完整性约束,这些约束并不明显,无法以任何方式强制执行。可以想象,当您添加新元素时,很容易忘记、违反或破坏事物。

例如,这些结构和它们之间的关系可以很容易地根据表、主键和外键进行建模。出于这个原因,我们认为使用真正的关系数据库可能会获得一些优势,但我们强烈希望实现以下目标:

  1. 仍然必须能够从数据库实例(用于配置系统)
  2. 我们希望以某种方式将 Git 与数据库的并发使用集成 - 或者理想情况下,我们希望能够轻松创建实例的分支,创建合并请求,让其他人查看分支之间的差异并最终批准它们。

您知道任何好的策略或对上述要求有任何建议吗?对于上述问题(尤其是问题2),是否有任何特定的工具?某些技术是否曾经遇到过此类问题?任何使整个开发流程更安全、更轻松的建议将不胜感激。

只需将数据库存储为纯文本:

$ sqlite3 config.db .dump > config.db.sql
$ cat config.db.sql
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE Users(name primary key);
INSERT INTO "Users" VALUES('me');
INSERT INTO "Users" VALUES('you');
INSERT INTO "Users" VALUES('somebody');
CREATE TABLE Config(name, value, user references Users(name));
INSERT INTO "Config" VALUES('EnableBugs',0,NULL);
INSERT INTO "Config" VALUES('EnableBugs',1,'you');
INSERT INTO "Config" VALUES('BackgroundColor','#000000','me');
INSERT INTO "Config" VALUES('BackgroundColor','#ffffff','somebody');
INSERT INTO "Config" VALUES('BackgroundColor','#808080','you');
COMMIT;

最新更新