Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 创建/修改/删除申请表的数据库设计_Sql Server_Database Design_Database Schema - Fatal编程技术网

Sql server 创建/修改/删除申请表的数据库设计

Sql server 创建/修改/删除申请表的数据库设计,sql-server,database-design,database-schema,Sql Server,Database Design,Database Schema,我正在开发一个web应用程序,该应用程序将取代基于纸张的表单,以请求创建/修订/删除课程,我需要有关存储请求项的最佳数据库设计实践的帮助 注意 数据库仅用于请求的数据。请求获得批准后,必须手动将数据输入其他系统。(我们对此没有控制权) 请求在获得批准之前可以修改多次,我们需要每个请求的修订历史记录 我们需要跟踪每个请求的状态 创建一门课程需要30多个问题 有3-30多个问题需要修改课程(取决于需要修改的项目数量) 删除课程有5个问题 我的方法1 在这种方法中,我将创建/修订/删除的所有数据存

我正在开发一个web应用程序,该应用程序将取代基于纸张的表单,以请求创建/修订/删除课程,我需要有关存储请求项的最佳数据库设计实践的帮助

注意

  • 数据库仅用于请求的数据。请求获得批准后,必须手动将数据输入其他系统。(我们对此没有控制权)

  • 请求在获得批准之前可以修改多次,我们需要每个请求的修订历史记录

  • 我们需要跟踪每个请求的状态

  • 创建一门课程需要30多个问题

  • 有3-30多个问题需要修改课程(取决于需要修改的项目数量)

  • 删除课程有5个问题

我的方法1

在这种方法中,我将创建/修订/删除的所有数据存储在
RequestDetail
表中。由于每个
RequestDetail
可以有多个项目,例如
CourseMode
(例如在线、面对面),因此存在一些与每个
RequestDetail
相关的表。

下表是一个示例: 当用户请求创建课程时(
RequestID:1
),在获得批准之前有两个修订版(标题和费用已更改)。但是所有要修改和删除的列都是
NULL

当用户请求修订CourseFee(
RequestID:2
)时,用户输入新的费用和修订原因,剩余的创建和删除列为
NULL

当用户请求删除课程时(
RequestID:3
),用户输入删除原因,剩余列再次为
NULL

由于这些数据的用途更像是数据仓库,这是否简单且易于处理?但是表需要允许几乎所有字段都为空(对于创建,大多数字段都是必需的)

我的方法2

在这种方法中,请求的修订处理方式与第一种方法相同,但为修订和删除创建单独的表。但这种方法似乎是多余的,也不干净


我个人更喜欢第一种方法,但在这种情况下,最好的数据库设计实践是什么?有什么我忽略了或需要注意的吗?

在我看来,修订版可以改变课程的任何内容,因此,如果您有单独的CreateRequest和ReviesRequest表,几乎每一列都必须重复。我看不出有什么好理由这么做

删除可能更具争议性,因为大多数数据都是无关的。不过,我看不出为它单独制作一张桌子有什么好处。那么,如果不相关的字段为空呢?所以它有一堆空值

实际上,我不会为“修订原因”和“删除原因”创建单独的列。我只想写一个专栏,称之为“请求原因”或诸如此类的东西


您应该有一些字段来告诉您它是哪种类型的请求。(或者这就是FormTypeID吗?

是的,
FormTypeID
是用来告诉它是哪种类型的请求。如果
FormTypeID
为“删除”,则该行将有许多空值,因为大多数字段与课程删除无关。最好不要为“修订原因”和“删除原因”创建单独的列。非常感谢。