【问题标题】:SQL database design feedbackSQL 数据库设计反馈
【发布时间】:2016-11-09 21:38:26
【问题描述】:

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

这是我的桌子

表格

  • 表单ID
  • 表格名称
  • 表单文本
  • 版本号
  • 主动
  • 创建日期
  • 创建用户

用户

  • 用户 ID
  • 名字
  • 姓氏
  • 创建日期
  • 创建用户

用户表单

  • 用户 ID
  • 表单ID
  • 创建日期
  • 创建用户

UserForm 表可以为每个用户提供许多表单,但我需要构建数据库以了解他们同意的表单版本。目前我拥有它的方式是我将在表单表中创建一个具有不同版本号的新记录,并使用新文本将其标记为活动。然后我会将旧记录标记为非活动,并且只在我的网站上显示活动表格。我还有什么其他方法可以做到这一点?

【问题讨论】:

  • 用户表单可以是视图

标签: sql sql-server database


【解决方案1】:

这个设计对我来说似乎很可靠。如果您担心同时拥有多个活动版本的表单的可能性,您可以向表中添加一个约束来防止这种情况发生(假设FormID 是您的主要代理键,并且FormCode 是您在所有不同版本的表单中使用的一致标识符):

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 2011-08-12
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      相关资源
      最近更新 更多