2012-09-24 75 views
1

例如,假設用戶在20th sept 2012上以1.50的價格購買了名爲soap的產品。這已經記錄在purchase表的數據庫productIDdate適用於電子商務方式的PHP/MYSQL解決方案

再說2012年9月22日,管理員將soap的價格更改爲1.20,現在報價因此而改變。

什麼是確保舊報告存儲舊數據1.50和存儲新報告1.20的最佳方法。我是否應該將所有數據包括產品名稱,產品價格插入purchase表格中?

+0

創建另一個表與歷史項目價格,並在打印報告檢查購買下降之間的日期x和y然後把價格 – Satya

+1

是的,這是最好的解決方案 –

+0

存儲價格將是個好主意.....它會幫助你進行其他數學計算,如利潤和稅收 – StaticVariable

回答

2

對你的問題的簡單回答是肯定的。

當涉及到財務系統時,任何可能需要審計的「交易」系統都應該全部存儲在「文檔」或「記錄」中。

還有其他一些方法,例如記錄每個刪除或修改「標記」(EG當前,刪除,修改等),「from_date」和「to_date」,而不是實際刪除或修改數據庫中的數據這將使用更多的服務器資源,並且不僅在mySQL中,而且PHP中的編程也顯得更爲複雜。但它允許您同時提供記錄之間的關係。

我的建議是保持簡單並將所有需要的數據存儲在一條記錄中。如果系統需要接受審覈,您將會節省時間和法律上的安全。

祝你好運,我希望它有幫助!

0

我不認爲這是必要的產品名稱存儲在購買表,但我認爲應該存儲的產品價格。

此外,如果您沒有將產品名稱存儲在購買表中,則應注意刪除產品。也許刪除它們不是最好的主意,所以你應該將它們從商店中隱藏起來,而不是從數據庫中刪除它們。

0

我通常會將產品的價格與產品ID和日期一起存儲在採購表中,或者如果您可以在購物車中有多個商品,那麼您將擁有采購表和purchase_product表。這是,如果您添加優惠券代碼或其他任何類似的東西,您將始終能夠看到該人爲該特定購買項目支付的費用。

0

我最近一直在研究與您所描述的產品接近的產品。我相信你的答案依賴於你願意實施你的項目的複雜程度。最簡單的方法是將產品信息存儲在發票記錄中。但是這會導致在時間上的冗餘。

另一方面,您可以實施修訂機制,以便隨時瞭解記錄的更改情況。這可以通過使用兩個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指示產品類型,而不是指定某種產品的特定修訂版本。當然,它的複雜性會讓你付出代價,但是你可以告訴你它是否值得。

相關問題