2011-02-15 87 views
0

我想在MySQL表中快照一行。獲取數據庫錶行的快照?

原因是,如果有人購買了產品。我想拍攝該產品的快照以存儲訂單。

它需要一個快照來保持數據的完整性。如果我只將產品分配給訂單,如果產品將來發生更改,訂單將顯示這些更改。例如,如果價格發生變化,訂單現在將加載新數據並表示它以新價格銷售產品,而不是訂單下達時的價格。因此,需要將快照分配給訂單。

我過去的做法是有兩張表格,一張是產品,另一張是產品快照。快照有每列作爲常規表加上額外的列像order_id

我有一個腳本來拍一個快照,自動查看常規表中的字段,並試圖做一個插入到快照表中的相同字段。

該方法最大的問題是,如果我向常規表中添加了列並忘記將相同的列添加到快照表中;該腳本會嘗試將數據插入不存在的字段並失敗。

我也不喜歡有兩個幾乎相同的表的想法。我想也許想出一個方法來使用一張桌子可能會更好。


所以我想知道是否有一種已知的方法,我不知道要解決這個問題?

我以前的項目沒有使用框架,但如果有問題,我的下一個項目將使用CakePHP。

回答

2

我認爲處理這個問題的最佳方法是將「快照」信息滾動到orders_products表中。因此,如果您有訂單,請將orders表中的總價格,稅收等信息存儲在單行中,並在orders_products表上引用order_id。在你的orders_products表中,你可以有order_id, product_id, price, quantity, discount以及其他你需要的東西。

+0

+1好的建議,對我的設計有一個明顯的改進。我會等到看到是否有其他好的建議,然後再標記答案。謝謝! – 2011-02-15 19:31:51

0

看起來像你以前的罰款。但是,您只需要進行更多測試,以確保您不會忘記將新字段添加到快照表。看起來像一個容易做的基本測試。另一種方法是隻使用大文本字段,並將快照存儲爲XML。這將允許您存儲快照,而不管架構是否更改。根據你想要查詢這些數據的多少,它可能會或可能不適合你。

此外,您可能不想存儲每個字段,因爲它可能只佔用額外的空間。例如,如果您具有該項目的圖像文件的位置,則可能不想存儲該項目,因爲它可能在以後不重要。您可以嘗試查詢information_schema以查詢快照表中的哪些字段,並僅複製可用字段。

+0

+1好的建議。 – 2011-02-15 19:34:18