【问题标题】:Create new database programmatically in Asp.Net MVC application?在 Asp.Net MVC 应用程序中以编程方式创建新数据库?
【发布时间】:2011-01-29 12:35:34
【问题描述】:

我在 MVC 2 中开发了一个时间表应用程序,供我们公司内部使用。现在其他小公司也对该应用表现出了兴趣。我没有考虑过该应用程序的这种用途,但它让我对它可能暗示的内容产生了兴趣。

我相信我可以通过修改数据库(由实体框架模型访问的 Sql Server)使其适用于多个客户端。但我读过一些人提倡使用多个数据库(每个客户一个)。

直观地说,这感觉是个好主意,因为我不会冒险将不同客户的数据混合在同一个数据库中(这当然不应该发生,但如果发生了……)。但是具体如何实现多数据库解决方案呢?

即使用单个数据库,我可以只注册一个客户,所有需要的数据都将由应用程序添加,就像现在只有一个客户(我自己的公司)时一样。

但是对于多数据库解决方案,我如何在用户注册时以编程方式创建新数据库?请注意,我使用 Linq to Sql 完成了所有数据库的工作,我对常规 SQL 编程不是很熟悉...

我非常感谢您能清楚详细地解释如何做到这一点(以及是否是一个好主意或单个数据库是否会更好的输入)。

编辑:

我也看到过关于单一数据库替代方案的讨论,建议您随后将 ClientId 添加到每个表中......但这不会很难在代码中维护吗?我必须在我假设的许多 linq 查询中添加“where”条件......而且我假设每个表上都有一个 ClientId 意味着每个表都需要与 Client 表具有多对一的关系?那不是很复杂的数据库结构吗?

现在(没有 Client 表)我有以下表(1 -> * 表示一对多关系):

客户 1 -> * 项目 1 -> * 任务 1 -> * TimeSegment 1 -> * 员工

此外,Customer 与 TimeSegment 直接建立一对多关系,以便于简化一些查询。

到目前为止,这工作得很好。难道不能简单地拥有一个与 Customer 表具有一对多关系的 Client 表(或 UserCompany 或任何人可能称之为的)吗?由于其余的由关系处理,因此其他表的数据完整性是否足够?

【问题讨论】:

    标签: asp.net sql-server asp.net-mvc-2


    【解决方案1】:

    至于是使用单个数据库还是使用多个数据库,这实际上完全取决于用例。更多的数据库意味着更多的管理需求,可能需要更多的磁盘空间等。这里需要考虑的不仅仅是如何创建数据库,例如如何自动创建备份过程等。我个人会使用一个数据库一个很好的身份验证系统,可以将数据过滤到适当的客户端。

    关于创建数据库,请查看this blog post。它描述了如何在 c#.net 中使用 SMO(sql 管理对象)来创建数据库。它们是一个非常简洁的工具,您一定会想熟悉它们。

    要处理后续问题,是的,客户和客户之间的单一顶级关系应该足以将新客户限制在他们的适当数据中。

    在没有任何关于您的应用程序的真正知识的情况下,我不能说添加该表会有多复杂,但是假设您的数据层已经达到标准,我会假设您真的只需要通过当前限制客户类客户,然后根据可用的客户获取所有其余数据。

    这有意义吗?

    【讨论】:

    • 谢谢。不过,请参阅我的后续文章,了解如何处理单个数据库关系?
    【解决方案2】:

    在此处查看我的回答,它也适用于您的情况:c# database architecture

    【讨论】:

    • 好的,谢谢,您建议使用单个数据库。但是我有一个后续问题,见上文。
    • @Anders:您的后续陈述是正确的。我认为您可以选择盲目地将 ClientID 字段添加到每个表中(简化您的数据库访问),或者进行更深入的分析,只在适当/需要的地方添加 ClientID 字段。无论您选择哪种方式,请确保彻底测试,这两种方法都是重大变化。 (但你已经知道了:-))
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2019-07-07
    相关资源
    最近更新 更多