【发布时间】:2014-01-31 17:12:28
【问题描述】:
我目前正在尝试对系统的一个方面进行建模,其中存储的组件可以更改状态,例如 OK、FAILED、REPAIRED 等。在 Web 端,我需要显示当前状态,以及历史以前的(如果有的话)状态。
我在这两种设计之间左右为难,谁能解释一下最好的方法(我更像是一个软件开发人员而不是一个 dba 人)。
选项一:
statehistory table 跟踪每次状态变化,最高序列号将是当前状态:SQLFiddle example
选项二: 与上面类似,除了当前状态存储在组件表中,只有过去的状态存储在历史表中。当状态改变时,当前状态作为历史中最新的状态插入,然后在组件表中设置当前状态:SQLFiddle example
顺便说一句,使用一个或两个但没有状态查找表,只需将状态文本存储为 varchar(我的想法是这样更容易报告吗?):SQLFiddle example
谢谢。
编辑:
有几个组件表,状态历史表应该包含所有这些数据,还是为每个组件制作一个状态历史表?每个组件表都会有数十万个条目,这使得 statehistory 表非常大。
例如: 表:component_a 表:component_b ETC.. 国史( component_a_id, 组件_b_id, state_id, ... )
【问题讨论】:
-
就个人而言,我会选择 sqlfiddle.com/#!6/f8555 - 但是,我会选择
DATETIME而不是 intSEQUENCE -
序列的日期时间超过 int 的任何具体原因?
-
DATETIME会比INT提供更多信息。DATETIME将通过MAX指示最近的(与INT一样),但它实际上会告诉您何时。再说一次,我的意见。 -
好点 - 我可能会使用它。我确实打算有一个“状态更改”字段,它是日期时间,我想这会用一块石头杀死两只鸟。
标签: sql sql-server database-design