我目前正試圖模擬系統的一個方面,從而存儲的組件可以更改狀態,例如OK,FAILED,REPAIRED等。在Web端我需要顯示當前狀態,還有以前(如果有的話)狀態的歷史。我在這兩種設計之間徘徊,任何人都可以在最好的方式(我更像是一個軟件開發人員而不是dba人員)上有任何改變。用於跟蹤狀態變化的最佳表格結構
選項之一:
其中每個時間的狀態變化跟蹤statehistory表中,最高序列號將是當前狀態:SQLFiddle example
方法二: 與上述類似,不同之處的當前狀態被存儲在組件表中,只有歷史狀態在歷史表中。當狀態改變時,當前狀態被插入爲歷史中最近的狀態,那麼電流被設置在組件表中:SQLFiddle example
另外,使用一個或兩個,但沒有狀態查找表,只需存儲狀態文本爲varchar(我的想法是這樣可以更容易地報告?):SQLFiddle example
謝謝。
編輯:
有幾種成分表,如果狀態歷史表中包含的數據,所有的人,或使每一個成分表statehistory?每個組件表都會有成千上萬的條目,這使得狀態歷史表非常大。
如: 表:component_a 表:component_b 等。 statehistory( component_a_id, component_b_id, STATE_ID, ... )
個人而言,我會選擇http://sqlfiddle.com/#!6/f8555 - 但是,我會選擇一個'DATETIME'而不是一個整數'SEQUENCE' – MarkD
任何特定原因的日期時間超過int序列? –
'DATETIME'會提供比INT更多的信息。 'DATETIME'會用'MAX'表示最近的(與'INT'一樣),但它實際上會告訴你什麼時候。再次,我的意見。 – MarkD