LaB*_*cca 1 sql-server plugins database-management
我正在创建一个应用程序,其中有主DB,其他数据存储在辅助数据库中.辅助数据库遵循"插件"方法.我使用SQL Server.
一个简单的应用程序安装只有mainDB,而作为一个选项,可以激活更多的"插件",每个插件都会有一个新的数据库.
现在为什么我做出这个选择是因为我必须使用现有的遗留系统,这是我能想到的最聪明的事情来实现插件系统.
MainDB和Plugins DB具有完全相同的模式(基本上Plugins DB有一些"特殊内容",一些可以用作模板的重要数据 - 例如在应用程序中考虑信件模板).插件DB在只读模式中使用,它们是"内容存储库"."聪明"的事情是主要的应用程序也可以被"插件编写者"使用,他们只是编写一个数据库插入内容,并通过备份数据库,他们创建了一个潜在的插件(这就是为什么所有的数据库都有相同的模式).
这些插件数据库是从互联网上下载的,因为有可用的内容升级,每次销毁完整的PlugIn数据库并且创建一个具有相同名称的新插件.这是为了简单起见,甚至因为这个DB的大小通常很小.
现在这个工作,无论如何我更喜欢用一种树结构来组织DB,这样我就可以强制插件DB成为主应用程序DB的"子DB".
作为一种解决方法,我正在考虑使用命名规则,例如:
ApplicationDB(用于主应用程序DB)
ApplicationDB_PlugIn_N(对于第N个插件DB)
当我搜索插件1时,我尝试连接到ApplicationDB_PlugIn_1,如果我没有找到数据库,则会引发错误.例如,如果som DBA重命名为ApplicationDB_Plugin_1,则会发生这种情况.
因此,因为那些插件DB实际上只依赖于ApplicationDB,所以我试图"做子文件夹技巧".
有谁能建议这样做的方法?你能评论我上面描述的这种自制的插件方法吗?
添加信息(启动后):
在MainDB中,我计划将连接信息存储到所有插件DB中.基本上它是数据库名称,因为我以一种方式设计了系统,即使我使用多个sql server登录访问MainDB,在后台单个用户(通常是"sa"或具有管理员权限的其他用户).
所以基本上如果我需要查询多个数据库,我将使用数据库名来区分插件,我不需要在数据库表中显式创建名为PluginID的文件.
所以它在某种程度上如此工作,在主DB中存储插件DB名称.所以我知道插件的名称,所以如果我想从所有插件查询所有GUNS,我会做这样的事情:
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'
Run Code Online (Sandbox Code Playgroud)
所以"技巧"是使用dbname来区分插件.现在这项工作,但对我来说似乎有点"肮脏".我的问题是"你有更好的方法吗?"
您可以使用模式:
CREATE TABLE mytable (id INT)
GO
CREATE SCHEMA plugin_schema
CREATE TABLE mytable (id INT)
GO
SELECT *
FROM dbo.mytable -- selects from the first one
SELECT *
FROM plugin_schema.mytable -- selects from the second one
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1434 次 |
| 最近记录: |