SQL数据库设计反馈
问题描述:
我有一个简单的数据库,我正在为我的web应用程序设计。基本前提是网站会显示一系列用户阅读的陈述,点击“我同意”等,并提交一份表格以及他们的个人详细信息和他们同意的陈述ID。有时候,语句文本可能会发生变化,我们希望通过版本控制来跟踪这种情况。我们不希望失去审计声明文本的历史记录,因为我们希望稍后能够记录每个用户同意的记录。我也想确保每个语句都是版本化的,这样当我查询数据库中的记录以显示在我的应用程序中时,我只想显示最新的迭代。SQL数据库设计反馈
下面是表我有
表
- FormID
- 窗体名称
- FORMTEXT
- VERSIONNUMBER
- 活动
- CREATEDATE
- CREATEUSER
用户
- 用户ID
- 姓
- 姓氏
- CREATEDATE
- CREATEUSER
窗体
- 用户名
- FormID
- CREATEDATE
- CREATEUSER
用户窗体表可以有许多形式,给每个用户,但我需要构造数据库是这样的一种方法来知道他们同意的表格的哪个版本。目前我拥有的方式是使用不同的版本号在Form表中创建一个新记录,并将其标记为新文本的Active。然后,我会将旧记录标记为非活动记录,并仅在我的网站上显示活动记录。我可以用其他方式做到这一点吗?
答
这个设计对我来说似乎非常稳固。如果您担心可能同时拥有多个活动版本的表单,则可以向该表添加一个约束条件,以避免这种情况发生(假设FormID
是您的主要代理键,而FormCode
是您在所有不同版本的表单中使用的一致标识符):
Create Unique Index ux_FormCode_Active On Form (FormCode) Where Active = 'Active';
答
设计唯一的问题是,您最终可能会标记为活动的同一表单的多个版本 - 难以限制数据库以保证不会发生这种情况。
解决此问题的一种方法是添加一个FormType表,其中一个ActiveFormId显示每个类型的当前FormId。您仍然可以按照原样将用户链接到表单。
userform可以是视图 – JT4U