【问题标题】:Best way to create a default Database setup via an .aspx page?通过 .aspx 页面创建默认数据库设置的最佳方式?
【发布时间】:2009-01-29 14:47:47
【问题描述】:

我们将出售一项由我们托管的服务,我们托管的每个客户都有自己的数据库,但会有一个集中式网站。我目前有一个空白数据库,其中包含新客户需要的一些东西。复制此数据库以便我可以设置另一个客户端的最佳方法是什么?我希望能够从 .aspx 页面执行此操作。提前致谢!

更新: 通过 .aspx 页面,我只是意味着我需要能够从 .aspx 页面启动进程。

更新2: 我们正在运行 SQL Server 2008。

更新 3:参考 Cade Roux 的回答...感谢您的出色回答,但是... 将所有数据库合并为一个,然后根据每个表中的标识符区分客户端的原因是什么?这不会极大地复杂化整个产品的架构吗?我需要将这些客户端 ID 列添加到几乎每个表中,并且 DAL 需要知道它正在寻找哪些客户端数据。使用我当前的设置,我只需根据访问站点的用户切换 DAL 中的连接字符串。这样,在设置连接字符串后,我再也不用担心查找客户端特定的数据了!这些方法如何比较(我应该将此作为单独的问题添加吗?

【问题讨论】:

    标签: asp.net sql-server database stored-procedures


    【解决方案1】:

    您有几个不同的选择:

    您可以分离您的空数据库,然后当用户注册时,复制该数据库并以他们的唯一名称安装它,并将其映射到他们在您的主数据库中的帐户。

    您可以使用脚本从头开始创建数据库,并从在线模板数据库或编写基本数据脚本填充任何基本数据,并将其映射到他们在主数据库中的帐户。

    如果您要拥有几十个客户,您应该认真考虑采用所有用户都在同一个数据库中的多租户架构(大多数表都有 CustomerID 列来隔离数据)。

    关于选项 3 的注释 - 这取决于您的应用程序。多租户可能难以改造。另一方面,从长远来看,管理和升级数百个单独的客户数据库可能很困难。

    以前有关于此的 Stack Overflow 问题:

    What are the advantages of using a single database for EACH client?

    One database or many?

    我想我会看到用 multi-tenant-db 或其他东西重新标记它们。无论如何,我认为这是您对特定策略的回答的次要考虑,这确实表明了在 StackOverflow 上的每个问题中包含有关您的总体战略目标的详细信息的重要性。

    【讨论】:

      【解决方案2】:

      根据您使用的数据库,有多种方法。最简单的方法是让您的数据库软件生成用于创建数据库的 SQL 代码并将其包含在您的软件中。另一种方法是在 C#/VB 中编写重新创建空数据库所需的步骤。

      为什么需要 .aspx 页面?

      【讨论】:

        【解决方案3】:

        您没有说您使用的是什么数据库版本,但在 SQL2005-2008 中,您可以“将数据库脚本编写为”,然后“创建到”并将 sql 移植到查询窗口。然后,您可以使用它来创建一个可以从您的 .aspx 页面调用的存储过程。

        【讨论】:

          【解决方案4】:

          SQL Server 有一个名为“模型”的系统数据库。模型中存在的任何数据库对象(表、视图、存储过程)都将添加到创建的任何新数据库中。

          您可以将“客户端数据库”架构创建为模型,并且任何新数据库都将具有所有相同的表...

          但是,如果您以后需要更改数据库架构,最好的选择是编写作为代码隐藏文件一部分的更改脚本。由于对“模型”数据库的更改不会传播到现有数据库,因此应用程序需要根据需要检测升级数据库架构。

          这种方法的缺点:如果您想要一个不是“客户端数据库”的数据库,那么您需要创建数据库,然后删除“客户端数据库”表。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-12
            • 1970-01-01
            • 2012-01-25
            • 2011-12-14
            • 2010-11-15
            • 2018-08-27
            • 1970-01-01
            相关资源
            最近更新 更多