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

时间:2012-08-23 11:52:08

标签: database database-design

我有以下类型的请求表:

oversea_study_request
course_request
leave_request

在这些请求功能中,审批人员可以发布多个备注,并批准或拒绝该请求。系统必须能够捕获所采取行动的历史记录。

设计它的最佳方法是什么?

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

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

1 个答案:

答案 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.actionapprovals.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 是它自己的主键)

可以使用idSELECT

找到每个请求+操作+评论

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