当需要的数据取决于“状态字段”时,规范化架构?

时间:2012-03-12 19:09:20

标签: database-design

我有一个User数据库表,其中包含以下字段,

Id
Username
Password
Status_id

状态表仅包含Idtitle字段,其值为PendingOn HoldActiveCompleted

当状态更改为Pending时,我想在单独的表中记录将用户更改为此状态的管理员的ID,date_changed(datetime)reason(text)等待。

On Hold时,我想知道reason(text)为什么,他们暂停的日期/时间以及他们将暂停的时间。

对于Completed我想知道他们得到的final_grade(int),附件的任何comments(text)和文件名。

由于许多状态类型,这让我很头疼,我想知道哪种数据库设计最适合这种情况?

如果有人想知道我正在使用PHP表单来更改状态值,那么我会根据所选值输入适当的值。

由于

3 个答案:

答案 0 :(得分:2)

您是否只为每种状态类型创建一个新表,并在每次状态更改时放入记录?这样,每个状态都有自己的字段。

某些联接应该允许您找到所需的任何信息。

答案 1 :(得分:0)

您可以将日志表用作:

tbl_logs | id | moderator | user | from_status | to_status | timestamp | reason
  • 主持人和用户是用户表的外键。
  • from_status,to_status是状态表的外键
  • 原因是文字

注意

  • from_status是多余的,您可以通过在时间戳上排序日志来从之前的to_status获取其值。
  • 我不确定final_grade。如果它仅用于物流目的,你可以把它放在日志中,如果它是用户固有的,你可以将它保存在用户表中。

答案 2 :(得分:0)

最后,我使用Doctrine Inheritance mapping解决了我的问题