2010-04-08 54 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

我假設學生分離數據庫,然後您連接到服務器。此時,您可以選擇數據庫名稱是唯一的。

或者,您可以恢復備份,並選擇當時的數據庫名稱,以便它們始終是唯一的。另外,假設學生的工作完全在數據庫中進行,數據庫的名稱應該與您和他們測試他們的代碼無關 - 除了從任何客戶端代碼進行外部訪問的連接字符串外。

相關問題