[英]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.action
和approvals.action_date
。 如果“操作”与“批准/拒绝”无关-也就是说,如果您可以在不批准/拒绝的情况下发布评论,或者在您可以批准/拒绝而没有评论的情况下-然后分别存储actions
和comments
,并包含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
是它自己的主键)
每个请求+动作+注释都可以通过SELECT
和LEFT JOIN
找到
顺便说一句,这是“海外”学习,而不是“海外”学习-这不是飞机上的课程 ;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.