2017-08-29 163 views
-1

目前我發現自己想知道在這種情況下這是否正確。數據庫設計Mysql

你看,我有一個名爲例如倉庫

數據庫我這個數據庫我有兩個表:

[表項是用於保存系統的項目添加 - 修改刪除記錄]

  1. 項目(其中其列)
    • TAG_ID
    • P_NUMBER
    • QUANTITY
    • TYPE
    • LOCATION
    • 說明
    • 原因
    • USERID
    • DATE

[表lastchanges是用於保存已被改變了系統的項目]

  • lastchanges(其它的列是)
    • ID
    • TAGID
    • PNUMBER
    • USERID
    • ACTION
    • 約會
  • 現在我已經被要求添加「到底發生了什麼改變」​​,以目前的形式,例如如果數量改變了我必須表明,在引導形式之前和之後。

    我的大腦告訴我剛纔添加的表項的所有列到lastchanges並保存這些列改變之前的數據,併爲項目修改後的新數據,但性能明智我認爲這是一個不好的作用我想要你的意見。

    +0

    * [...],我希望您的意見。* - ***對不起,*** *許多優秀的問題都會根據專家的經驗產生一定程度的意見,但對這個問題的回答幾乎完全基於意見,而不是事實,參考或具體專業知識。* – Script47

    +0

    相關:https://stackoverflow.com/問題/ 39281 /數據庫設計爲修訂 – Progrock

    回答

    1

    如果我理解正確,您需要更改數據庫的歷史記錄。

    如果這就是我建議你爲每個條目創建一個新行並刪除舊條目。那麼沒有東西會丟失,你總是可以得到不同或更舊的值。

    添加一個字段deleted_atcreated_at作爲日期將爲你做那個技巧。如果deleted_at爲空它的當前條目,如果有一個日期設置您確切知道它何時被「覆蓋」

    +0

    問題是他需要知道什麼已經改變,theres'項目'具有所有這些列值,但他需要知道,例如,如果quatity更改,以及它是什麼現在和過去一樣。 – Hex

    +1

    在這種情況下,需要更改表,包括表名稱和字段名稱。然後您可以通過建議的日期字段獲取當前值和舊值。 – MartinLeitgeb

    +0

    所以,我應該按照我的大腦的建議,我有兩種方法做到這一點,但這兩個方法效率非常低 1.我將所有項目列添加到lastchanges表中,並將舊數據保留在lastchanges列,所以當我將要顯示的數據,我從物品和舊從lastchanges拉新的。 2.我在lastchanges中創建一個列,只是將列和值分開,例如'〜' – Hex