什么是在一个CMS / MULTIPLE WEBSITE系统中管理数据库的最佳方法

时间:2013-03-14 08:09:22

标签: c# sql-server asp.net-mvc-3 sql-server-2005 entity-framework-4.1

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

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

数据库包含很多表:

主要表格

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

Web 1表

  • web1Post
  • web1CustomTable
  • web1Table2 等...

Web 2表

  • web2Customtable3
  • web2CustomTable4
  • web2Table4 等...

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

但我想将数据库分成MainDatabase,web1database,web2database等......

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

我正在使用EntityFramework,Asp.net MVC

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

4 个答案:

答案 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中。

相关问题