Sql server 创建/修改/删除申请表的数据库设计
我正在开发一个web应用程序,该应用程序将取代基于纸张的表单,以请求创建/修订/删除课程,我需要有关存储请求项的最佳数据库设计实践的帮助 注意Sql server 创建/修改/删除申请表的数据库设计,sql-server,database-design,database-schema,Sql Server,Database Design,Database Schema,我正在开发一个web应用程序,该应用程序将取代基于纸张的表单,以请求创建/修订/删除课程,我需要有关存储请求项的最佳数据库设计实践的帮助 注意 数据库仅用于请求的数据。请求获得批准后,必须手动将数据输入其他系统。(我们对此没有控制权) 请求在获得批准之前可以修改多次,我们需要每个请求的修订历史记录 我们需要跟踪每个请求的状态 创建一门课程需要30多个问题 有3-30多个问题需要修改课程(取决于需要修改的项目数量) 删除课程有5个问题 我的方法1 在这种方法中,我将创建/修订/删除的所有数据存
- 数据库仅用于请求的数据。请求获得批准后,必须手动将数据输入其他系统。(我们对此没有控制权)
- 请求在获得批准之前可以修改多次,我们需要每个请求的修订历史记录
- 我们需要跟踪每个请求的状态
- 创建一门课程需要30多个问题
- 有3-30多个问题需要修改课程(取决于需要修改的项目数量)
- 删除课程有5个问题
RequestDetail
表中。由于每个RequestDetail
可以有多个项目,例如CourseMode
(例如在线、面对面),因此存在一些与每个RequestDetail
相关的表。
下表是一个示例:
当用户请求创建课程时(RequestID:1
),在获得批准之前有两个修订版(标题和费用已更改)。但是所有要修改和删除的列都是NULL
当用户请求修订CourseFee(RequestID:2
)时,用户输入新的费用和修订原因,剩余的创建和删除列为NULL
当用户请求删除课程时(RequestID:3
),用户输入删除原因,剩余列再次为NULL
由于这些数据的用途更像是数据仓库,这是否简单且易于处理?但是表需要允许几乎所有字段都为空(对于创建,大多数字段都是必需的)
我的方法2
在这种方法中,请求的修订处理方式与第一种方法相同,但为修订和删除创建单独的表。但这种方法似乎是多余的,也不干净
我个人更喜欢第一种方法,但在这种情况下,最好的数据库设计实践是什么?有什么我忽略了或需要注意的吗?在我看来,修订版可以改变课程的任何内容,因此,如果您有单独的CreateRequest和ReviesRequest表,几乎每一列都必须重复。我看不出有什么好理由这么做 删除可能更具争议性,因为大多数数据都是无关的。不过,我看不出为它单独制作一张桌子有什么好处。那么,如果不相关的字段为空呢?所以它有一堆空值 实际上,我不会为“修订原因”和“删除原因”创建单独的列。我只想写一个专栏,称之为“请求原因”或诸如此类的东西
您应该有一些字段来告诉您它是哪种类型的请求。(或者这就是FormTypeID吗?是的,
FormTypeID
是用来告诉它是哪种类型的请求。如果FormTypeID
为“删除”,则该行将有许多空值,因为大多数字段与课程删除无关。最好不要为“修订原因”和“删除原因”创建单独的列。非常感谢。