2008-11-18 61 views
0

我有一個內部的企業應用程序,我爲我公司建立在淨3.5/SQL 2008部署SQL 2008數據庫與C#應用程序

發展我有兩種類型的數據庫。主系統數據庫包含我們所有的全球數據,例如用戶名和客戶等。還有項目數據庫,其中包含有關我們客戶項目的實際數據。

當系統爲客戶創建新項目時,需要使用提供表,視圖,sps等的自定義模式來配置新的SQL數據庫。項目數據庫的名稱對應於項目的項目ID項目存儲在系統數據庫中。因此,新項目將創建一個名爲Project_XXX的新項目數據庫,其中XXX是項目ID。

我的問題是以編程方式配置自定義數據庫的最佳方式是什麼?現在我唯一能想到的方法是有一個類從文件系統中讀取一個SQL腳本,並執行解析來替換數據庫名稱的項目ID。這很容易,但看起來相當不雅。

任何接近一些退伍軍人喜歡這個?

回答

1

通常,如果只有一個(或少數)的數據庫,並且您可以直接控制它們(典型的企業環境),那麼我建議不要自動升級數據庫,因爲它比它的價值更麻煩。只需將腳本傳遞給正在進行安裝的人員即可。

對於更廣泛的發佈版本,我已經使用了一個腳本,與SQL Server SMO庫(Server.CurrentContext.ExecuteNonQuery())一起使用。我不覺得它不雅,它很簡單,它的工作原理。

對於第一個版本,我們將包含完整的數據庫構建腳本,然後爲每個後續版本添加升級腳本。所以如果有人在V1.1上安裝v1.2,我們只能運行v1.2腳本。但是,如果他們全新安裝,我們將運行v1.0,v1.1和v1.2。

1

我認爲最好的方法是在源代碼控制服務器上維護此腳本;畢竟,它是大部分系統基礎架構的源代碼,並且可以像其他任何程序一樣受益於正確的代碼維護,測試等。然後從那裏安裝。

如果你對這個架構有任何嘮叨的疑問,我會假設你會加強你對每個項目單獨數據庫的不確定性。我稱之爲大規模;我在很多情況下都看過很多次,而且我還沒有看到它很好。我甚至會提名它作爲Antipattern考慮。

+0

Big Denorm很有趣。我們的問題是我們是一個ASP和項目數據庫是巨大的。這是我們分割這麼多數據的唯一途徑。它也允許我們存檔整個數據庫。但是,如果你有更好的模式,我全都是耳朵。 – Jiyosub 2008-11-18 02:58:28

+0

沒什麼特別的,只需爲「ProjectID」設置一組表格和一列額外的列。 這是一個額外的工作來節省大量的工作,保持架構的許多副本(包括表格定義,索引,sps,視圖等等)的一致性。 – dkretz 2008-11-19 00:26:34

0

由於您使用.NET 3.5,您可能需要考慮使用LINQ。 LINQ能夠使用映射文件或您創建的強類型DBML文件動態創建數據庫(link to howto)。我相信它可以在多個地方創建適當的表格。這可能適用於簡單的數據庫。

但是,如果您有非主鍵上的函數或存儲過程和/或索引,我看不出它是如何工作的。映射文件可能能夠跟蹤這些,但我從來沒有使用過,所以我很懷疑。可能@ doofledorfer的想法是使用SQL腳本在新數據庫中重新創建數據庫結構。無論如何,我通常會將這些腳本保存在我的源代碼控制中。

如果您還沒有這樣做,您可能需要查看管理更新的工具。據推測,當你的代碼/數據庫發生變化時,你需要在現有項目中滾動任何數據庫變更。我們用Red Gate SQL工具獲得了很好的結果。

相關問題