代码之家  ›  专栏  ›  技术社区  ›  Mike Bailey

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

  •  0
  • Mike Bailey  · 技术社区  · 16 年前

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

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

    有没有什么方法可以让一个通用数据库有多个独立的副本,每个副本都可以并发加载和修改,而不会对任何一个副本进行任何更改,从而影响其他副本?

    我读了一点书,想也许可以按照以下思路来做:

    1. 使用唯一数据库连接数据库
    2. 进行所有必要的操作
    3. 分离数据库

    3 回复  |  直到 16 年前
        1
  •  1
  •   Greg Bray    16 年前

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

    1. 学生提交他们数据库的备份副本(标准.BAK文件)。
    2. 然后,脚本使用备份替换选项将数据库从备份替换为数据库。
    3. 然后,您可以运行任何需要的放坡步骤,或者保持数据库的连接以供将来参考,或者在空间有限时将其删除。

    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
  •  2
  •   KM.    16 年前

    简单的解决方案是让他们对数据库进行唯一命名。实际上,从一开始就开发他们的代码来使用这个独特的名称。你不能要求学生把他们的数据库命名为STU\u1234,其中“1234”是他们唯一的学号。你可以更进一步:STU琰111琰222琰333琰4444,其中111是班级,222是部门,333是作业,444444是他们唯一的学生id。这样就不需要做任何花哨的事情。

        3
  •  1
  •   Cade Roux    16 年前

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

    另外,假设学生的工作完全在数据库中进行,那么数据库的名称对于您和他们测试代码来说应该是不相关的——除了用于从任何客户机代码进行外部访问的连接字符串。