我有以下类型的请求表:
oversea_study_request
course_request
leave_request
在这些请求功能中,审批人员可以发布多个备注,并批准或拒绝该请求。系统必须能够捕获所采取行动的历史记录。
设计它的最佳方法是什么?
有人可以就每种方法的利弊提出建议吗?
答案 0 :(得分:3)
类似于此处的字段组织问题:How to better organise database to account for changing status in users;和my answer there:
如果所有请求都包含相同字段,字段类型和信息,包括必填字段(NOT NULL
)和可选字段等,那么最好放置所有请求到一个requests
表。将一个字段指定为request_type
,使用int提高效率和SQL方便性,或ENUM type。例如:
overseas study = 1
course = 2
leave = 3
同样,对approvals
表执行此操作...如果每个类型的进程相同,则将它们存储在一起。存储请求ID(requests.id
)。由于您有多个批准 - 评论和批准+拒绝,请将其存储在approvals.action
和approvals.action_date
中。如果“操作”独立于“批准/拒绝” - 也就是说,如果您可以在不批准/拒绝的情况下发布评论,或者如果您可以在没有评论的情况下批准/拒绝,则存储actions
和{{1}分开,并包含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
当然,添加user_id,username等表/字段。 (每个表中的Table2: actions
id, request_id, action_type, action_date
Table3: comments
id, request_id, comment, comment_date
是它自己的主键)
可以使用id
和SELECT
顺便说一句,这是“海外”学习,而不是“海外”学习 - 它不是飞机上的课程; - )