簡體   English   中英

在SQL中緩慢更改數據

[英]Slowly Changing Data in SQL

我的問題是有關在MS SQL Express 2014中實現緩慢更改數據的最佳方法。

場景如下:

管理員進行並定義用戶要參加的測試。 管理員有一個名為“問題”的表,其中包含所有可能的問題。

另一個名為“測驗”的表從“問題”表中標識了10個問題,以定義測驗。

另一個名為“測驗定義”的表標識了測驗表中10個問題中的每個問題應如何設置格式(簡短答案或段落響應)。

另一個稱為“管理配置”的表基本上將測驗分配給測驗定義,然后將其管理給用戶。

最終用戶希望能夠隨時間更改任何這些表中的參數。 因此,例如,管理員可能要更改“您最近好嗎?”中的問題。 到“你今天好嗎?”。

我的問題是,例如,我今天管理一個測試,問題ID 1234為“你好嗎?”。 明天,我改變問題,第二天,我以“你今天好嗎?”的方式進行測試。 如果我僅依靠關系查詢來問給用戶的問題是什么,我將看到被問到的ID為1234的問題。 但是第一個測試對象被問到問題的第一個版本,而第二個用戶被問到了第二個版本。

我的問題是,在這種情況下,哪種最佳方法是:1)允許管理員編輯數據庫中的記錄,而2)維護測試結果的“時間點”數據,以便我確切地知道每個測試是如何執行的? 到目前為止,我所能做的就是維護一個龐大的“測試結果”表,該表在每個結果的同一行中列出問題,問題類型等。 該方法的問題在於,在實際應用程序中可能需要跟蹤許多參數,從而使結果表寬30列。

新建一個表(foo),以保存問題修訂的歷史記錄。 foo表具有ID,questionId和questionBody。 同樣在測試結果中,您應該保存foo.ID。 測驗定義中無需更改。

您需要更改數據模型。

測試是帶有一組問題的測試,並且問題的歷史隨着變化而增長。

因此,您的測試將使用已定義的版本(歷史ID)解決問題。 如果您更改測試,則也應該為測試提供歷史記錄。

更新:如果您無法更改測試和問題,則可以創建一個測試歷史記錄表以及一個問題歷史記錄表和測試問題歷史記錄。 在更改問題時,您將測試,問題鏈接復制到歷史表中。 然后修改問題並更新測試歷史記錄。 這不是很好,並且會重復很多數據。 另外,xou將需要特殊的代碼來提取和處理歷史測試的顯示。 更好的恕我直言,有一個結合在一起的fk,由id和version組成。 更新問題時,您將更新測試的歷史版本,准備一個具有test-question關系的n:m表,並復制問題的鏈接。 然后通過復制單個問題,更改版本和創建新版本的文本來更新單個問題,並將其鏈接到新測試,以替換舊版本。

在系統中question.id的重要性未知。 如果不相關,則只需進行版本測試。 那么問題的新版本與舊版本無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM