我正在創建一個應用程序,其中有主DB和其他數據存儲在輔助數據庫中。輔助數據庫遵循「插件」方法。我使用SQL Server。有沒有辦法在sql server中創建子數據庫作爲一種子文件夾?
一個簡單的應用程序安裝將只有mainDB,而作爲一個選項可以激活更多的「插件」,並且每個插件都會有一個新的數據庫。
現在爲什麼我做這個選擇是因爲我必須使用一個現有的遺留系統,這是我可以實現插件系統的最聰明的事情。 (基本上插件數據庫有一些「特殊內容」,一些可用作模板的重要數據 - 例如在應用程序中以信函模板的形式考慮)。插件數據庫只在readonly模式下使用,它們是「內容存儲庫」。這個「聰明」的事情是主應用程序也可以被「插件編寫者」使用,他們只是編寫一個數據庫插入內容,並且通過備份數據庫創建一個潛在的插件(這就是爲什麼所有數據庫都具有相同的插件模式)。
這些插件數據庫是從互聯網上下載的,因爲有內容升級可用,每當完整的PlugIn數據庫被銷燬並且一個新名稱被創建時就會被創建。這是爲了簡單,甚至因爲這些數據庫的大小通常很小。
現在這個工作,無論如何,我寧願組織一種樹結構的數據庫,以便我可以強制插件數據庫是主應用程序數據庫的「子數據庫」。
作爲一種變通方法,我想使用的命名規則,如:
ApplicationDB(主應用程序DB)
ApplicationDB_PlugIn_N(對於第N個插件DB)
當我搜索對於插件1我試圖連接到ApplicationDB_PlugIn_1,如果我沒有找到數據庫我提出了一個錯誤。例如,如果som DBA重命名爲ApplicationDB_Plugin_1,則可能發生這種情況。
所以,既然這些插件DB真的依賴於ApplicationDB,我只是試圖「做子文件夾技巧」。
任何人都可以提出一種方法來做到這一點?你能評論一下我上面描述的這種自制的插件嗎?
ADDED INFO(後開始BOUNTY):
在MainDB我打算存儲的連接信息到所有的插件數據塊。基本上它是數據庫名稱,因爲我以一種即使我使用多個sql server登錄名訪問MainDB,一個用戶(通常是「sa」或具有管理員權限的其他用戶)在幕後的方式設計系統。
因此,基本上如果我需要查詢多個數據庫,我將使用數據庫名來區分插件,我不需要在數據庫表中顯式創建名爲PluginID的文件。
因此,不知何故,它的工作原理是這樣的,在主DB中存儲插件數據庫名稱。所以我知道插件的名稱,所以如果我想查詢所有從所有插件的槍,我會做這樣的事情:
select * from ApplicationDB_Plugin_1.dbo.weapons where weapon_type = 'gun'
union
select * from ApplicationDB_Plugin_2.dbo.weapons where weapon_type = 'gun'
union
select * from ApplicationDB_Plugin_3.dbo.weapons where weapon_type = 'gun'
使「絕招」是使用DBNAME插件區別開來。現在這項工作,但對我來說似乎有點「骯髒」。我的問題是「你有更好的方法可以設想嗎?」
@ user193655:你的交叉DB-UNION'骯髒'正是我的建議所避免的。你在尋求更好的方法,這就是我所建議的。 – n8wrl 2010-05-27 11:43:01
問題:您聲明「MainDB和插件數據庫具有完全相同的模式」。例如:「ApplicationDB.dbo.weapons」是否具有「Application_Plugin_x.dbo.weapons」的Idential結構? – 2010-05-28 17:16:15
是的,它們是一樣的。一個簡單的例子是:假設有4個NorthWind數據庫。一個是MainDB,另外三個是插件DB。這是它的工作原理。 – LaBracca 2010-05-31 07:46:44