Создание нескольких экземпляров общей базы данных - PullRequest
0 голосов
/ 08 апреля 2010

В настоящее время я пытаюсь настроить, где общая база данных распространяется среди студентов. Они разработают приложение с использованием этой базы данных (скажем, приложение для корзины покупок), отправят свой проект на наш сервер, и тогда оно будет оценено автоматически.

Эти базы данных работают в Microsoft SQL Server 2005.

Мы используем пользовательские экземпляры для создания экземпляров каждой базы данных, и несколько запросов могут обслуживаться одновременно. Но проблема в том, что, когда более одного студента представили проект для оценки, первая создаваемая база данных будет единственной и перезапишет все остальные копии, которые были открыты в настоящее время.

Таким образом, если stu1 изменил свою базу данных, и у проектов stu2 и stu3 была проведена параллельная оценка проектов, в конце классификации в stu1, stu2 и stu3 будут идентичные базы данных в конце.

Можно ли каким-либо образом иметь несколько независимых копий общей базы данных, каждую из которых я могу одновременно загружать и изменять без каких-либо изменений, влияющих на другие?

Я немного почитал и подумал, что возможно сделать что-то вроде:

  1. Студент представляет проект
  2. Присоединить базу данных с уникальной БД имя (указывается студентом)
  3. Выполнить все необходимые операции
  4. Отключение базы данных

Я не уверен, если это решит нашу проблему или будет возможно, поэтому любая помощь будет высоко ценится!

Ответы [ 3 ]

2 голосов
/ 08 апреля 2010

Простым решением было бы дать им уникальное имя для своих баз данных. На самом деле разработайте свой код, чтобы использовать это уникальное имя с самого начала. Разве вы не должны требовать от студентов назвать свои базы данных, например, STU_1234, где «1234» - это их уникальный номер студента. Вы можете пойти еще дальше: STU_111_222_333_444444, где 111 - это класс, 222 - это раздел, 333 - это задание, а 444444 - их уникальный идентификатор студента. Таким образом, нет необходимости делать что-то причудливое.

1 голос
/ 08 апреля 2010

Я предполагаю, что студент отключает базу данных, а затем вы подключаетесь к серверу. В этот момент вы можете выбрать уникальное имя базы данных.

В качестве альтернативы вы можете восстановить резервную копию и выбрать имя базы данных на тот момент, чтобы они всегда были уникальными.

Кроме того, предполагая, что работа студентов происходит полностью в базе данных, имя базы данных должно быть действительно неуместно для вас и для них при тестировании своего кода - за исключением строки подключения для внешнего доступа из любого клиентского кода. 1005 *

1 голос
/ 08 апреля 2010

Мы делаем нечто подобное, когда клиенты заходят на сайт и вводят информацию о настройке. Затем веб-сайт создает копию общей базы данных и загружает информацию о настройке в базу данных, создает резервную копию и отправляет файл резервной копии клиенту. Похоже, ваша главная проблема - все базы данных названы одинаково. Я предлагаю использовать следующие шаги для оценки:

  1. Учащиеся представляют резервную копию своей базы данных (стандартный файл .BAK).
  2. Ваша система оценок использует сценарий, чтобы сначала создать новую пустую базу данных с уникальным именем на сервере. Важно сначала создать новую базу данных, чтобы файлы создавались в правильном месте на сервере. Чтобы создать уникальное имя, вы должны использовать идентификатор проекта, идентификатор студента и, возможно, временную метку, если студенты будут отправлять несколько баз данных.
  3. Затем сценарий заменяет пустую базу данных базой данных из резервной копии с помощью параметра «С заменой».
  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...