繁体   English   中英

如何设计数据库请求/批准表?

[英]How to design database request/approval tables?

我有以下几种请求表:

oversea_study_request
course_request
leave_request

在这些请求功能中,审批人员可以发表多条评论,也可以批准或拒绝该请求。 系统必须能够捕获所采取动作的历史记录。

最好的设计方法是什么?

  • 我应该创建一个公用表来存储批准信息和备注。
  • 我应该在每个请求表中存储批准信息和备注。

有人可以就每种方法的利弊提供建议吗?

类似于此处的字段组织问题: 如何更好地组织数据库以解决用户的更改状态 还有我的回答

如果所有请求都具有相同的字段 ,字段类型和信息,包括必需的( NOT NULL )和可选的等,那么最好将所有请求放入一个requests表中 将一个字段指定为request_type ,为效率和SQL方便性使用int或ENUM type 例:

overseas study = 1
course = 2
leave = 3

同样,对approvals表也​​要这样做...如果每种类型的处理过程相同,则将它们存储在一起。 存储请求ID( requests.id )。 由于您可能有多个批准注释和批准+拒绝,因此将它们存储在approvals.actionapprovals.action_date 如果“操作”与“批准/拒绝”无关-也就是说,如果您可以在不批准/拒绝的情况下发布评论,或者在您可以批准/拒绝而没有评论的情况下-然后分别存储actionscomments ,并包含request.id

所以你有了:

Table1: requests
    id INT
    request_type INT (or ENUM)
    request_date DATETIME
    ...

Table2: approvals (or 'actions', to be general)
    id
    request_id    # (refers to requests.id above)
    action_type   # (approve or reject)
    action_date
    comment

如果意见和批准不一定在一起,那么:

Table2: actions
    id, request_id, action_type, action_date

Table3: comments
    id, request_id, comment, comment_date

当然,还要添加user_id,用户名等表/字段。 (每个表中的id是它自己的主键)

每个请求+动作+注释都可以通过SELECTLEFT JOIN找到

顺便说一句,这是“海外”学习,而不是“海外”学习-这不是飞机上的课程 ;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM