通过.aspx页面创建默认数据库设置的最佳方法?

时间:2009-01-29 14:47:48

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

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

更新: 通过.aspx页面,我只是意味着我需要能够从.aspx页面开始这个过程。

UPDATE2: 我们正在运行SQL Server 2008。

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

4 个答案:

答案 0 :(得分:2)

您有几种不同的选择:

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

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

如果您将拥有超过几十个客户,您应该认真考虑进入多租户架构,其中所有用户都在同一个数据库中(大多数表具有CustomerID列以隔离数据)。

关于选项3的说明 - 取决于您的申请。多租户可能难以改造。另一方面,从长远来看,管理和升级数百个客户数据库可能很困难。

以前存在Stack Overflow问题:

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

One database or many?

我想我会看到用多租户db或其他东西重新标记它们。无论如何,我认为这可以作为您对特定策略的回答的次要考虑因素确实显示了在StackOverflow上的每个问题中包含有关策略总体目标的详细信息的重要性。

答案 1 :(得分:1)

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

为什么需要.aspx页面?

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

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

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