创建通用数据库的多个实例

时间:2010-04-08 17:33:36

标签: sql-server sql-server-2005

目前我正在尝试设置一个通用数据库分发给学生的设置。他们将使用这个数据库开发一个应用程序(比如说购物车应用程序),将他们的项目提交到我们的服务器上,然后它会自动评分。

这些数据库正在Microsoft SQL Server 2005中运行。

我们正在使用用户实例来实例化每个数据库,并且可以同时为多个请求提供服务。但是,问题是当不止一个学生提交要评分的项目时,第一个要实例化的数据库将是唯一一个并且会覆盖当前打开的所有其他副本。

因此,如果stu1修改了他的数据库并且stu2和stu3同时对他们的项目进行了评分,那么在评分结束时stu1,stu2和stu3将在结尾处具有相同的DB。

有没有办法可以拥有一个通用数据库的多个独立副本,每个副本都可以同时加载并修改而不会对影响其他任何一个的任何一个进行任何修改?

我做了一点阅读,并认为可以做一些事情:

  1. 学生提交项目
  2. 使用唯一数据库附加数据库 姓名(由学生指定)
  3. 完成所有必要的操作
  4. 分离数据库
  5. 我不确定这是否能解决我们的问题或是否有可能,所以任何帮助都会非常感激!

3 个答案:

答案 0 :(得分:2)

简单的解决方案是让他们唯一地命名他们的数据库。实际上开发他们的代码从一开始就使用这个唯一的名称。您不能要求学生将他们的数据库命名为STU_1234,其中“1234”是他们唯一的学号。您可以更进一步:STU_111_222_333_444444,其中111是班级,222是部分,333是作业,444444是他们唯一的学生ID。这样就没有必要做任何花哨的事了。

答案 1 :(得分:1)

我们做类似的事情,客户登录网站并输入设置信息。然后,该网站创建通用数据库的副本,并将设置信息加载到数据库中,创建备份并将备份文件发送给客户。听起来像你的主要问题是所有的数据库都被命名为相同。我的建议是使用以下步骤进行评分:

  1. 学生提交数据库的备份副本(标准.BAK文件)。
  2. 您的评分系统使用脚本首先在服务器上创建一个具有唯一名称的新空白数据库。首先创建一个新数据库非常重要,这样才能在服务器上的正确位置创建文件。要创建唯一名称,您应该使用项目ID,学生ID,以及学生将提交多个数据库时的时间戳。
  3. 然后,脚本使用With Replace选项将空白数据库替换为备份中的数据库。
  4. 然后,您可以运行所需的任何评分步骤,并保留数据库以备将来参考,如果空间有限,则将其删除。
  5. 您可以在C#或Powershell中编写脚本,并使用以下SQL查询:

    USE Master
    CREATE DATABASE [PROJECTID_STUDENTID_TIMESTAMP]
    --Unique database is now created and stored in default SQL data/log file location
    RESTORE DATABASE [PROJECTID_STUDENTID_TIMESTAMP] FROM DISK = 'c:\pathtofile\filename.bak' WITH REPLACE
    --Student database is now available for grading
    USE [PROJECTID_STUDENTID_TIMESTAMP]
    --Add grading scripts here
    

答案 2 :(得分:1)

我假设学生分离数据库然后连接到服务器。此时,您可以选择数据库名称是唯一的。

或者,您可以恢复备份并在那时选择数据库的名称,以便它们始终是唯一的。

此外,假设学生的工作完全在数据库中进行,数据库的名称应该与您和他们测试代码无关 - 除了从任何客户端代码进行外部访问的连接字符串。 / p>