Sql-Server

保存歷史可編輯數據 RDBMS

  • November 13, 2012

我想製作像測試系統這樣的應用程序。每個問題都有一個或多個答案變體(一個或多個可能是正確的)。我很抱歉導師和學生使用我的測試系統。這意味著導師可以進行主題、問題和答案的CRUD操作。但在這種情況下,保存版本出現了一個大問題。例如,我是一名導師,我決定編輯一些問題或答案(或者可能是幾個問題和幾個答案)。當我以學生身份進入時,我想獲得一個我犯了錯誤的問題列表,但導師已經編輯了這個問題並且我得到了錯誤的資訊。

主要問題:如何保存舊版本的問題和答案?

在此處輸入圖像描述

每個測試都有問題,每個問題都有問題。導師可以編輯/添加/刪除任何這些組件。例如,他或她可以修改其中一個問題的文本,將幾個問題添加到測試中,並編輯剛剛修改的問題的答案之一。任何提示我如何處理所有這些,以便我可以在過去的確切時間檢索測試版本?

到目前為止,這是我想出的。解決方案非常複雜,我覺得有更好的方法來做到這一點。

如果必須“凍結”給定的測試,那麼當使用者想要進行更改時,您應該創建一個全新的測試(問題、答案等)。與其在問題或答案上給他們一個“編輯”按鈕,不如在測試中給他們一個“複製”按鈕。

之前關於標記“活動”版本的建議是一個很好的建議。

編輯:

我不記得以前看過你的照片,所以我會根據它和你以後的評論進行更新。我仍然建議您通過“複製”現有的測試來創建一個全新的測試,但是您可以像您的兩個 *Log 表的工作方式一樣執行此操作,儘管稍作修改。這個怎麼樣:

test (id), say one row.
question (id, text), 7 rows.
answer (id, text), 28 rows (4 for each question).

請注意,沒有任何東西將它們連接在一起。現在…

test_question (test_id, question_id).  7 rows.
question_answer (test_id, question_id, answer_id).  28 rows.

現在,換一個問題:發出一個新的test_id(+1小行)。複製新測試的所有未更改的 test_question 和 question_answer 值(6+24 小行)。添加一個新問題行 (+1) 並將舊 question_answer 複製到這個新問題 (+4 小行)。

大多數新行都由整數組成,因此它們會小而快。您沒有複製任何較大的問題/答案行。

這也使您能夠在僅給出 test.id 的情況下找到您需要知道的*所有內容。*使用這種類型的版本控制,您可以說 Johnny 參加了測試 #5,並且確切地知道他看到了什麼,而無需任何計算等。

希望有幫助。

引用自:https://dba.stackexchange.com/questions/28195