SQL数据库设计反馈

时间:2016-11-09 21:38:26

标签: sql sql-server database

我有一个简单的数据库,我正在为我的Web应用程序设计。基本前提是网站显示用户阅读的一系列陈述,点击“我同意等”并提交一份表格,其中包含他们的个人详细信息以及他们同意的陈述ID。有时语句文本可能会发生变化,我们希望通过版本控制来跟踪这一情况。我们不希望丢失用于审计的语句文本的历史记录,因为我们希望能够在以后提取记录以查看每个用户同意的内容。我还想确保每个语句都是版本化的,这样当我在数据库中查询要在我的应用程序中显示的记录时,我只想显示最新的迭代。

以下是我的表格

表格

  • FormID
  • FormName
  • FormText
  • VersionNumber
  • 有效
  • CreateDate
  • CREATEUSER

用户

  • 用户ID
  • 姓氏
  • CREATEDATE
  • CREATEUSER

用户窗体

  • 用户ID
  • FormID
  • CREATEDATE
  • CREATEUSER

UserForm表可以为每个用户提供多种表单,但我需要构建数据库,这样才能知道他们同意哪种形式的表单。目前我的方式是在Form表中创建一个具有不同版本号的新记录,并使用新文本将其标记为Active。然后,我将旧记录标记为非活动状态,仅在我的网站上显示活动表格。还有什么方法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

设计唯一的问题是你可能最终得到标记为Active的同一表单的多个版本 - 很难约束数据库以保证不会发生这种情况。

解决此问题的一种方法是添加FormType表,其中ActiveFormId显示哪个FormId是每种类型的当前FormId。您仍然可以将用户链接到表单。

答案 1 :(得分:0)

这个设计对我来说非常可靠。如果您担心同时拥有表单的多个活动版本的可能性,您可以向表中添加一个约束,这将阻止这样做(假设FormID是您的主要代理key,FormCode是您在其所有不同版本的表单中使用的一致标识符):

Create Unique Index ux_FormCode_Active On Form (FormCode) Where Active = 'Active';