2010-04-08 82 views
0

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

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

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

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

有什么方法可以让我有一个通用的数据库的多个独立副本,每一个我可以同时加载和修改,而不必影响到其他任何一个所做的任何更改?

我做了一点阅读,并认为有可能沿的线做一些事情:

  1. 学生提交项目
  2. 安装具有独特的分贝 名(学生指定)数据库
  3. 做一切必要的行动
  4. 分离数据库

我取消当然,如果这可以解决我们的问题或者是可能的,那么任何帮助将非常感谢!

+0

Frobnicate数据库。 – 2014-09-17 18:09:52

回答

1

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

  1. 学生提交他们的数据库(标准.BAK文件)的备份副本。
  2. 您的分级系统使用脚本来第一次在服务器上唯一的名称创建一个新的空白数据库。首先创建一个新的数据库非常重要,这样才能在服务器上的正确位置创建文件。要创建一个唯一的名称,您应该使用项目ID,学号,并且如果学生要提交多个数据库,可能需要一个时间戳。
  3. 然后,脚本使用With Replace选项将数据库中的空白数据库替换为备份数据库。
  4. 然后,您可以运行所需要的任何分级步骤,要么保持数据库连接以供将来参考或跌落时,如果空间是有限的。

你可以在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

简单的解决办法是让他们唯一命名他们的数据库。实际上开发他们的代码从一开始就使用这个独特的名字。你不能要求学生命名他们的数据库像STU_1234,其中“1234”是他们唯一的学号。你可以走得更远:STU_111_222_333_444444,其中111是班级,222是部分,333是任务,444444是他们唯一的学生ID。这样就没有必要做任何事情了。

+0

我们可以,但我们希望它可以让学生在线下载包含规范,部分实现和数据库文件的项目包。我们要求他们使用已知信息或将以已知方式使用的集合数据库。唯一的用户会做的是写代码来实际访问和修改它。 – 2010-04-08 17:57:51

+0

它不会很难让他们下载并重命名数据库并更改代码中的连接字符串 – 2010-04-08 18:23:49

1

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

或者,您可以恢复备份,并选择当时的数据库名称,以便它们始终是唯一的。另外,假设学生的工作完全在数据库中进行,数据库的名称应该与您和他们测试他们的代码无关 - 除了从任何客户端代码进行外部访问的连接字符串外。

相关问题