2013-04-24 67 views
0

我使用各種模式編寫和使用XML編寫的技術文檔。我開發了一個相當簡單的Windows Forms應用程序,我們現在在辦公室用作工作流系統。該程序可以簽入,簽出並移動驗證過程。該程序使用通用的'data.xml'文件來讀取和寫入,從中記錄筆記,作者,狀態和其他各種事物。我應該使用關係數據庫來存儲我的XML文檔

但是,此時應用程序指向共享驅動器上的文件夾結構,其中包含每個項目中的所有xml文件以及包含程序項目數據的data.xml文件。所以當有人檢出一個文件時,應用程序只是簡單地將文件從一個文件夾移動到另一個文件夾(用戶不可見),更新data.xml文件,他們更新UI中的listViews。

這工作正常,除非當然有幾個人正在同一個項目,並且客戶端應用程序嘗試同時寫入data.xml文件。

所以我想我想要做的是將整個系統遷移到數據庫。因此,不是將XML文件存儲在文件夾中,而是將它們存儲在SQL等數據庫中。現在我完全沒有數據庫的經驗,所以希望有一個指針能把我朝正確的方向發展。理想情況下,我需要能夠查詢數據庫中的xml文檔,所以我希望能夠使用Xquery,並理想地在所有文件上運行進程。例如,目前我可以在整個項目的客戶端上運行XSLT,他們只是坐在一個文件夾中。

所以我的問題是,我應該看什麼類型的數據庫以保留這種功能?像SQL這樣的關係,或者一個xml數據庫?

注意:xml文件最多爲每個數百Kbs。

回答

0

而不是將xml文檔存儲在數據庫中,我會說爲項目和客戶特定的數據使用數據庫。如果大多數xml文件不會推遲太多,則可以使用xml模板並返回到使用XSLT的目的,以便在呈現之前使用有用的數據更新這些模板。我的xml模板在哪裏?它可以在您的文件系統或數據庫中。這樣可以避免存儲大量的xml文檔,並避免在數據庫中重複使用xml代碼。

+0

感謝您的評論。 xml或至少xml標籤中的內容在文檔和文檔之間是非常不同的。我最終希望以任何方式將它全部存入數據庫,所以我想知道建議哪種方式。謝謝。 – Daedalus 2013-04-24 11:40:13

-1

「...爲了保留這種功能,我應該查看哪種類型的數據庫?」

確實只有一種數據庫類型 - RDBMs。所有類型的關係數據庫都支持XML,文本或二進制存儲以用於諸如文件和文檔之類的東西。

對我來說,更大的問題是,在普通編程和SQL數據庫中,您是否能夠在多用戶環境中支持文檔存儲。簡短的回答是,我不這麼認爲,至少在沒有大量工作的情況下。

問題是這樣的:假設你和我在同一間辦公室工作。我轉到文檔DB並下載文檔XYZ.xml的副本並開始進行更改。同時,您還可以獲得該文檔的副本並開始進行更改。當我完成後,我會檢查我的更改(sql中的正常更新函數)。然後當你檢查你的更改時,你的更改將覆蓋我的。大問題。但是,如果您可以將文檔檢出過程限制爲「獨佔」使用(即,一次只能有一個人可以簽出並簽入文檔),那麼SQL上的XML文檔存儲就可能不需要大量的時間工作的。這可以簡單地在文檔存儲表中設置一個標誌,就像DocInUse = True一樣。如果DocInUse = True,那麼文檔在重新檢入並且DocINUse字段= False之前不能再次下載。我相信你會跟隨。

順便說一下,有這樣的應用程序可以爲您做到這一點。有來自微軟的Team Foundation Server和Source Safe,以及允許進行這種存儲和檢出/登記處理的其他程序......但這些程序並不便宜。

我希望這會有所幫助。

+0

我清楚地沒有解釋我自己。我不打算讓幾個人在同一個xml文檔上工作,只是data.xml文件,它實際上是應用程序本身的配置文件,它存儲關於誰擁有文檔的數據,關於它的註釋和各種其他數據位關於xml文件本身。這是目前唯一需要同時共享的文件,這是因爲我在數據庫之外工作。 – Daedalus 2013-04-24 13:51:05

+0

我意識到有其他的應用程序可以做類似的事情,但是它們也有很多我們不需要的功能,並且沒有太多的功能需要我們去做。爲了清晰起見,我簡要介紹了應用程序,而不想深入討論它。 該程序工作正常,正是我們所需要的,我只想將它全部包含在數據庫中。就這些。 – Daedalus 2013-04-24 13:51:43

0

而不是所有的猴子的業務,你能找到一個源代碼管理系統,只允許一個人一次簽出一個文件。或者只是使用某種文件鎖定機制來限制一次只能訪問一個人。

相關問題