2016-01-26 21 views
1

我們目前使用JSON文件來存儲配置系統所需的數據。我們使用Git作爲版本控制系統。如何與Git(或Git)同時使用數據庫

我們不時手動填充這些JSON:我們用來同時修改文本,例如,通過在數組中添加新元素並將更改提交給Git。另外,因爲JSON的格式爲純文本,所以在批准提交之前,Git可以輕鬆地重新定義,創建或審閱任何合併請求。

但是,我們基本上將這些JSON用作所有配置的數據庫。我們認爲這不是最好的選擇。例如,這些JSON中定義的(元素)結構之間存在大量的完整性約束,這些約束不明顯,也不能以任何方式實施。正如你可以想象的那樣,添加新元素時很容易忘記,違反或破壞事物。

這些結構和它們之間的關係可以很容易地根據表,主鍵和外鍵進行建模,例如。出於這個原因,我們認爲可能會得到一些好處,使用一個真正的關係數據庫中,但我們強烈希望實現以下目標:

  1. 它仍然必須能夠自動生成從 數據庫實例JSON的(以配置系統)
  2. 我們想要以某種方式整合Git與DB的併發使用 - 或者理想情況下我們希望能夠輕鬆創建實例分支,創建合併請求,讓其他人檢查差異分支機構之間的差異並最終批准它們。

你知道有什麼好的策略或對上述要求有什麼建議嗎?有沒有針對上述問題的具體工具(特別是問題2)?這種問題是否曾經遇到過一些技術?任何建議,使整個開發流程更安全和簡單,將強烈感激。

+0

你有Howmuch配置?使用配置文件有什麼問題?因爲這感覺有點複雜.... –

+0

很多數組,很多條目,一些關係。目前尚不清楚,例如,哪些字段是強制性的以描述每個元素,哪些不是,等等。元素字段之間的交叉引用很多。現在真的很難。我們對不同類型的產品也有重疊的配置。現在很難得到這個東西。 – Martin

回答

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;