【问题标题】:When create new Database创建新数据库时
【发布时间】:2010-07-12 11:19:35
【问题描述】:

我有一个一般性的数据库设计问题:什么时候创建新数据库而不是向现有数据库添加新表更好?该问题与设计/可维护性以及性能问题有关。

背景:我们通过每晚将数据导入我们称为 RM2 的数据库来镜像客户的主表。一些新的(ASP.Net-)项目也需要访问这些数据,现在我想知道是否应该为每个项目创建新数据库或将它们的表与 RM2(当前大小:37991.94 MB)合并。

【问题讨论】:

    标签: sql-server performance database-design maintainability


    【解决方案1】:

    我不一定会回答你的问题,但我也会给你一些其他问题供你考虑:

    1. 我应该何时将文件添加到我的数据库中的文件组? - 当文件变得太大时,“太大”可能是一个问题。
    2. 我应该何时向我的数据库添加新文件组? - 当您希望能够针对不同的数据库操作优化磁盘使用时。
    3. 我应该何时向我的数据库添加新架构? - 当您拥有一组逻辑相关且可能需要用户不同默认权限的对象时。
    4. 我什么时候应该向我的应用程序添加一个新数据库? - 当您不需要两个数据库中的任何表之间的任何引用完整性时。当您不想允许任何所有权链接权限在两组对象之间交叉时。当您想要独立备份和恢复时。当您需要对两组数据使用不同的 SQL Server 恢复模型时。

    我想这可能已经回答了你的一些问题。 ;-)

    【讨论】:

    • 到目前为止,我在以前的工作中“只是”一名开发人员。因此,我们为每个项目创建了一个数据库,它们之间从未相互关联。但现在我必须维护一个现有的庞大数据库。因为每个新项目都以某种方式与我们的 RM2-Data 相关,所以我已经向其中添加了新表,但想知道这是否是正确的方法(逻辑上/可维护性/性能)。我必须考虑创建点 1,2 和 3。我不知道不支持跨数据库引用完整性这一事实。感谢您添加这些问题。
    【解决方案2】:

    这不是数据库设计问题。这是一个组织问题。这个问题的组织方面比技术问题重要得多。

    答案是:让开发人员的生活更轻松的方式

    例如,你说:

    一些新的 (ASP.Net-) 项目也需要访问这些数据。

    这些项目与您的项目的集成度如何?您实际上是否共享数据(或写入相同的表)?例如,如果您对其中一个表进行了重大更改,您是否需要同时更改其他项目中的代码? (有时很难在两个项目之间进行同步)。

    如果您实际上不共享数据(除了客户数据,我认为它实际上是只读的),那么请使用单独的数据库(OR 模式)。这使得更改更易于管理。

    另一个技巧是在每个数据库中都有一组关于客户数据的视图,这些数据存在于其他地方,在另一个模式中。

    因此,每个项目都有一个数据库,每个数据库中都有客户数据的视图,这些数据位于一个单独的数据库中。

    性能应该不是问题,除非数据库位于不同的机器上。

    【讨论】:

      【解决方案3】:

      如果任何项目只想使用自己的数据库,您可以为项目获取其他数据库。但是如果你想获得这个数据中心,你应该为每个项目创建一个其他共享数据库+自有数据库。

      【讨论】: