例如,假設用戶在20th sept 2012
上以1.50
的價格購買了名爲soap
的產品。這已經記錄在purchase
表的數據庫productID
和date
。適用於電子商務方式的PHP/MYSQL解決方案
再說2012年9月22日,管理員將soap
的價格更改爲1.20
,現在報價因此而改變。
什麼是確保舊報告存儲舊數據1.50
和存儲新報告1.20
的最佳方法。我是否應該將所有數據包括產品名稱,產品價格插入purchase
表格中?
例如,假設用戶在20th sept 2012
上以1.50
的價格購買了名爲soap
的產品。這已經記錄在purchase
表的數據庫productID
和date
。適用於電子商務方式的PHP/MYSQL解決方案
再說2012年9月22日,管理員將soap
的價格更改爲1.20
,現在報價因此而改變。
什麼是確保舊報告存儲舊數據1.50
和存儲新報告1.20
的最佳方法。我是否應該將所有數據包括產品名稱,產品價格插入purchase
表格中?
對你的問題的簡單回答是肯定的。
當涉及到財務系統時,任何可能需要審計的「交易」系統都應該全部存儲在「文檔」或「記錄」中。
還有其他一些方法,例如記錄每個刪除或修改「標記」(EG當前,刪除,修改等),「from_date」和「to_date」,而不是實際刪除或修改數據庫中的數據這將使用更多的服務器資源,並且不僅在mySQL中,而且PHP中的編程也顯得更爲複雜。但它允許您同時提供記錄之間的關係。
我的建議是保持簡單並將所有需要的數據存儲在一條記錄中。如果系統需要接受審覈,您將會節省時間和法律上的安全。
祝你好運,我希望它有幫助!
我不認爲這是必要的產品名稱存儲在購買表,但我認爲應該存儲的產品價格。
此外,如果您沒有將產品名稱存儲在購買表中,則應注意刪除產品。也許刪除它們不是最好的主意,所以你應該將它們從商店中隱藏起來,而不是從數據庫中刪除它們。
我通常會將產品的價格與產品ID和日期一起存儲在採購表中,或者如果您可以在購物車中有多個商品,那麼您將擁有采購表和purchase_product表。這是,如果您添加優惠券代碼或其他任何類似的東西,您將始終能夠看到該人爲該特定購買項目支付的費用。
我最近一直在研究與您所描述的產品接近的產品。我相信你的答案依賴於你願意實施你的項目的複雜程度。最簡單的方法是將產品信息存儲在發票記錄中。但是這會導致在時間上的冗餘。
另一方面,您可以實施修訂機制,以便隨時瞭解記錄的更改情況。這可以通過使用兩個ids而非一個記錄輕鬆完成。下面是一個示例表:
CREATE TABLE IF NOT EXISTS `product` (
`product_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`entity_id` bigint(20) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`price` double NOT NULL DEFAULT '0',
PRIMARY KEY (`product_id`),
KEY `inx_entity_id` (`entity_id`)
) DEFAULT CHARSET=utf8 ;
雖然product_id
是你的普通自動遞增的ID,該entity_id
是一個特殊的ID是同一產品的所有記錄相同。在這種設計中,您永遠不會刪除記錄,也不會更新記錄。你總是會插入表格中,當你需要獲得產品清單時,你只需要記住在entity_id
之上的一個組是有序的。產品信息可以在product_id
最大的記錄中找到。也許你可能想創建一個實體表來跟蹤entity_id
。
這種設計比複製產品信息到發票更復雜。但它有很多好處。就像你可以跟蹤產品的價格變化一樣。或者,您可以使用外鍵product_id
指向產品的一個特定修訂版本,或使用entity_id
指示產品類型,而不是指定某種產品的特定修訂版本。當然,它的複雜性會讓你付出代價,但是你可以告訴你它是否值得。
創建另一個表與歷史項目價格,並在打印報告檢查購買下降之間的日期x和y然後把價格 – Satya
是的,這是最好的解決方案 –
存儲價格將是個好主意.....它會幫助你進行其他數學計算,如利潤和稅收 – StaticVariable