【问题标题】:What is best way to manage database in ONE CMS/MULTIPLE WEBSITE system在一个 CMS/多个网站系统中管理数据库的最佳方法是什么
【发布时间】:2013-03-14 08:09:22
【问题描述】:

我正在开发内容管理系统 (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

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

【问题讨论】:

  • 这是一个常见问题,但我不知道任何特定的解决方案都完全符合“最佳解决方案”的要求,而无需进一步解释每个解决方案试图解决的问题。也就是说,许多解决方案(尤其是在第二次或第三次尝试之后)可能被认为是该特定情况的“最佳”。您可能需要考虑寻求合理的解决方案,而不是“最好的”解决方案。

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


【解决方案1】:

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

你需要

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

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

【讨论】:

  • 看看 TFS 和 Microsoft Dynamics CRM 如何做到这一点可能是一个好的开始,因为它们都允许有限但有用的可扩展性。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 多租户问题很常见,通常使用多个数据库来解决。您对这些数据库的部署方式做了很多假设。使用多数据库解决方案的最佳理由是,一旦租户离开,相关的数据库和数据就会被简单地归档和删除。使用单独的数据库提供了很大的灵活性。
    • 我认为数据删除是不得已而为之,与存储系统的体积和成本关系不大。此外,删除某些系统中的数据是有害的,例如在 Facebook 上。
    • 正如我所见,当单个租户的数据可以增长到数百 GB 时,这是非常相关的。当数据增长到那么大时,还有很多性能考虑因素。有了这么大的数据库,拥有专用服务器是有意义的,而不仅仅是专用数据库。如果租户离开,那只是释放了更多资源。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多