3

我正在开发内容管理系统 (CMS)。但这与其他 CMS 不同。我可以维护一个 CMS 并将内容定义到多个网站。就像一个博客。但是有些网站有不同的表格。

我当前的 CMS 有一个数据库(MS SQL 2005)

数据库包括很多表:

主表

  • 用户
  • 模块
  • 传送门
    等...

Web 1 表

  • web1Post
  • web1CustomTable
  • web1Table2 等...

Web 2 表

  • web2自定义表3
  • web2CustomTable4
  • web2Table4 等...

每个自定义表都加入了 User、Portal 和其他一些表。这是成功的作品。

但我想将数据库分离到 MainDatabase、web1database、web2database 等......

我正在尝试分离数据库。但问题是用户、门户和连接的表有问题

我正在使用 EntityFramework,Asp.net MVC

解决这个问题的最佳方法是什么?

4

4 回答 4

3

没有“最好”的方法来解决这个问题。只需分离数据库,然后开始修复应用程序中的代码。

你需要

  • 为新数据库创建实体框架映射
  • 更新代码并删除对现有数据库的引用
  • 添加引用新数据库的新代码

但是,我建议您不要分离数据库,而是在现有架构中进行更改以支持自定义。也许您可以使用 xml 列来存储自定义数据,甚至可以创建应用程序层,以便它可以动态更新数据库结构。这就是 TFS 和 Dynamics CRM 处理定制的方式——它们在数据库中有主模式,而元数据 shcema 则存储有关定制的信息。

于 2013-03-15T12:06:25.343 回答
2

下载并安装 Kentico CMS 并探索它如何解决这个问题。如果您想让一个多租户数据库为每个租户/网站定义/复制不同的架构。

于 2013-03-19T14:40:20.067 回答
1

您无法解决来自不同数据库的相关表的问题。不要为单个网站创建数据库,例如 SharePoint 不会为子网站创建数据库。只需在 subweb 的每个表中创建一个外键,例如 SubwebId。当您决定拥有单独的数据库时,您必须创建用于生成子网站数据库的存储过程、在 IIS 下创建网站的方法(还需要将域绑定到子网站)、从模板生成网站文件的方法通过替换所有连接字符串。你真的想做吗?我认为这不是一个好主意。(对不起英语不好)

于 2013-03-14T08:49:19.283 回答
0

从您目前的描述来看,我觉得您拥有一个 CMS 数据库和几个相关网站。您可以使用 SCHEMA 来分离不同站点的数据。因此,您可以将 [dbo] 模式用于与所有站点相关的表。然后 [website1] 用于特定于 website1 的表,依此类推。

各个数据库应该大部分是相互独立的。ACID 并不总是跨数据库工作。各个数据库将有单独的备份时间。每个数据库都可以移动到不同的服务器。每个数据库可能处于不同的状态。您不能在数据库之间建立良好的干净可靠的外键关系。只要您需要 [User] 和其他表之间的依赖关系,那些其他表就必须在同一个数据库中。

于 2013-03-21T16:47:09.737 回答