我们目前使用JSON文件来存储配置系统所需的数据。我们使用Git作为版本控制系统。
我们不时手动填充这些JSON:我们使用同时修改文本,例如,通过在数组中添加新元素并将更改提交给Git。另外,由于JSON是纯文本格式,因此在批准提交之前,Git可以让我们轻松地重新定义,创建或查看任何合并请求。
但是,我们实际上使用这些JSON作为所有配置的数据库。我们认为这不是最好的选择。例如,在这些JSON中定义的(结构中的元素)之间存在大量的完整性约束,这些约束不明显且不能以任何方式强制执行。可以想象,添加新元素时很容易忘记,违反或破坏。
例如,这些结构和它们之间的关系可以根据表,主键和外键轻松建模。出于这个原因,我们认为使用真正的关系数据库可能会获得一些优势,但我们强烈希望实现以下目标:
您是否了解任何良好的策略或对上述要求有任何建议?是否有针对上述问题的特定工具(特别是问题2)?某些技术是否曾遇到过这类问题?我们非常感谢任何使整个开发流程更安全,更容易的建议。
答案 0 :(得分:1)
只需将数据库存储为纯文本:
$ 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;