【发布时间】:2015-06-06 14:41:09
【问题描述】:
我正在开发一个 Web 应用程序,该应用程序取代了纸质表单以请求创建/修订/删除课程,我需要有关存储请求项目的最佳数据库设计实践的帮助。
注意
数据库仅用于请求的数据。一旦请求被批准,数据必须手动输入到不同的系统中。 (我们无法控制)
请求在获得批准之前可能会被多次修改,我们需要每个请求的修改历史记录
我们需要跟踪每个请求的状态
创建课程有 30 多个问题
修改一门课程有3-30+道题(取决于需要修改的项目数)
删除一门课程有5道题
我的方法 1
在这种方法中,我会将用于创建/修改/删除的所有数据存储在 RequestDetail 表中。由于每个RequestDetail 可以有多个项目,例如CourseMode(例如在线、面对面),因此每个RequestDetail 都有一些表关联。
下表是一个示例:
当用户请求创建课程 (RequestID:1) 时,在获得批准之前有两个修订(标题和费用更改)。但是 Revision 和 Deletion 的所有列都是NULL。
当用户请求修改 CourseFee (RequestID:2) 时,用户输入新费用和修改原因,剩余的创建和删除栏为 NULL。
当用户请求删除课程 (RequestID:3) 时,用户输入删除原因,剩余的列再次为 NULL。
既然这些数据的目的更像是一个数据仓库,这是否简单易处理?但是表需要允许几乎所有字段为 Null(创建时,大部分字段都是必需的)。
我的方法 2
在这种方法中,请求修订的处理方式与第一种方法相同,但为修订和删除创建单独的表。但这种方法似乎多余且不干净。
我个人更喜欢第一种方法,但在这种情况下,最好的数据库设计实践是什么?有什么我忽略或需要注意的吗?
【问题讨论】:
标签: sql-server database-design database-schema