我正在开发内容管理系统(CMS)。但这与其他CMS不同。我可以维护一个CMS并为多个网站定义内容。像博客一样。但是有些网站有不同的表格。
我当前的CMS有一个数据库(MS SQL 2005)
数据库包含很多表:
主要表格
Web 1表
Web 2表
每个自定义表都加入了User,Portal和其他一些表。这是成功的。
但我想将数据库分成MainDatabase,web1database,web2database等......
我正在尝试分离数据库。但问题是用户,门户和连接表有问题
我正在使用EntityFramework,Asp.net MVC
解决这个问题的最佳方法是什么?
答案 0 :(得分:3)
没有“最好”的方法来解决这个问题。只需分离数据库,然后开始修复应用程序中的代码。
你需要
但是,我建议您不要分离数据库,而是在现有架构中进行更改以支持自定义。也许您可以使用xml列来存储自定义数据,甚至可以创建应用程序层,以便它可以动态更新数据库结构。这就是TFS和Dynamics CRM处理自定义的方式 - 它们在数据库和元数据shcema中具有主模式,用于存储有关自定义的信息。
答案 1 :(得分:2)
下载并安装Kentico CMS并探索它如何解决此问题。如果您希望多租户数据库为每个租户/网站定义/复制不同的架构。
答案 2 :(得分:1)
您无法解决来自不同数据库的相关表的问题。 不要为各个站点创建数据库,例如SharePoint不会为子站点创建数据库。只需在子站点的每个表中创建一个外键,例如SubwebId。 当您决定使用单独的数据库时,您必须创建用于生成子站点数据库的存储过程,在IIS下创建Web站点的方法(还需要将域绑定到子站点),从模板生成站点文件的方法通过替换所有连接字符串。你真的想做吗?我认为这不是一个好主意。 (Sory表示英语不好)
答案 3 :(得分:0)
从您的描述到目前为止,我觉得您有一个CMS数据库和几个相关网站。您可以使用SCHEMA来分离单独站点的数据。因此,您可以将[dbo]架构用于与所有站点相关的表。然后[website1]用于特定于website1的表格,依此类推。
个别数据库应该大多是彼此独立的。 ACID并不总能跨数据库工作。单个数据库将具有单独的备份时间。每个数据库都可以移动到不同的服务器。每个数据库可能处于不同的状态。数据库之间不可能有一个良好的,干净可靠的外键关系。只要您需要[User]和其他表之间的依赖关系,那些其他表必须位于同一个db中。