create/revise/delete 申请表的数据库设计

Database design for create/revise/delete request form

我正在开发一个替代 paper-based 表单来请求 creation/revision/deletion 课程的 Web 应用程序,我需要有关存储请求项目的最佳数据库设计实践方面的帮助。

备注

我的方法一

在这种方法中,我会将 create/revise/delete 的所有数据存储在 RequestDetail table 中。由于每个 RequestDetail 可以有多个项目,例如 CourseMode(例如在线 face-to-face),因此每个 RequestDetail 都有一些 table。

下面的table就是一个例子: 当用户请求创建课程 (RequestID:1) 时,在获得批准之前会有两次修订(更改标题和费用)。但是修订和删除的所有列都是 NULL.

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

当用户请求删除课程(RequestID:3)时,用户输入删除原因,剩下的列又是NULL.

既然这个数据的用途更像是一个数据仓库,能不能简单点好办?但是 table 需要允许几乎所有字段为空(对于创建,大多数字段都是必需的)。

我的方法 2

在这种方法中,请求修订的处理方式与第一种方法相同,但为修订和删除创建单独的 tables。但是这种做法显得多余而且不干净。

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

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

删除可能会更 debatable 因为大部分数据都是不相关的。尽管如此,我仍然没有看到为它单独制作一个 table 有什么好处。那么,如果不相关的字段为空怎么办?所以它有一堆空值。

实际上我不会为 "revision reason" 和 "delete reason" 创建单独的列。我只做一个专栏并将其命名为 "request reason" 或类似的名称。

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