在SQL中慢慢更改数据

时间:2015-03-23 22:29:07

标签: sql sql-server database

我的问题是关于在MS SQL Express 2014中实现缓慢变化数据的最佳方法。

方案如下:

管理员制定并定义用户采用的测试。管理员有一个名为" Questions"的表,它可以提出所有问题。

另一张名为" Quiz"从问题表中识别10个问题以定义测验。

另一个名为" Quiz Definition"确定如何格式化测验表中的10个问题中的每一个(简答或段落响应)。

另一个名为"管理配置"基本上将测验分配给测验定义,然后将其管理给用户。

最终用户希望能够随时间更改任何这些表中的参数。因此,例如,管理员可能想要更改“#34;你好吗?"到了#34;你今天过得怎么样?"。

我的问题是,我今天管理一个测试ID 1234的问题是"你好吗?"。明天,我改变了问题,第二天,我将测试作为"你今天做得怎么样?"。如果我依靠纯粹的关系查询来询问向用户询问的问题,我会看到问题ID 1234被问到。但第一个测试主题被问到问题的第一个版本,而第二个用户被问到第二个版本。

我的问题是,鉴于这种情况,1)允许管理员编辑数据库中的记录,同时2)维持"时间点"测试结果的数据,所以我确切地知道每个测试是如何执行的?到目前为止我所能想到的只是维持一个巨大的测试结果"在每行结果的同一行中列出问题,问题类型等的表。该方法的问题在于可能有很多参数需要在实际应用程序中进行跟踪,使结果表格像30列宽。

2 个答案:

答案 0 :(得分:1)

创建一个新表(foo),保存问题修订的历史记录。 foo表有ID,questionId和questionBody。同样在测试结果中,您应该保存foo.ID。测验定义中不再需要更改。

答案 1 :(得分:0)

您需要更改数据模型。

测试是一系列问题的测试,问题的历史随着任何变化而增长。

因此,您的测试将使用已定义的版本(历史记录ID)解决问题。 如果你改变了测试,那么测试也是有意义的。

更新:如果您无法更改测试和问题,则可以创建测试历史记录表和问题历史记录表以及测试问题历史记录。在更改问题时,您将测试,问题,链接复制到历史记录表中。然后修改问题并更新测试组织。这不是很好,会复制很多数据。此外,xou将需要特殊代码来提取和处理历史测试的显示。 有一个组合的fk,由id和版本制作,这是更好的imho。 更新问题时,更新测试的hist版本,准备好n:m表,并提供测试问题关系,并复制指向问题的链接。然后通过复制它来更新单个问题,更改版本和文本以创建新版本并将其链接到新测试,替换旧版本。

在您的系统中,question.id的重要性尚不清楚。如果不相关,则只需要测试版本。然后,新版本的问题与旧版本无关。