在用戶可以下訂單的數據庫中,最好是有一個帶地址的新表,或者每個訂單在其標題中都有地址數據。數據庫優化訂單
數據庫優化訂單
回答
這不僅僅是用戶(和它們的地址),但也對價格和你正在銷售,可以訂單後更改產品的其他信息被放置,然而爲了本身必須保持不變。
一般來說,有2種方法是:您在訂單(及其項目)需要
- 複製的一切。即使「主」數據發生更改,您仍然可以在可以使用的訂單內有副本。
- 「版本」或「歷史」整個數據庫,類似於this。
(1)是更「實用」的方法,但可能會導致數據的冗餘(例如,當地址不變化,你仍然使得它的單獨副本)。 (2)是更純粹的方法,但可能需要更多的JOIN,並且通常會更復雜。
我想不出任何地址與訂單在同一個表格中的原因,只不過它現在爲您節省了少量的工作。
論點有一個單獨的表包括:
能夠與一個用戶的多個送貨地址,而不必通過所有訂單搜索(關聯,所以很容易向用戶提供地址的下拉列表他們以前使用過)。
您可以使用相同的表計費和送貨地址,避免重複
可以延長/更改地址是如何存儲在未來的(例如,通過增加一個國家外地當你去國際),而不必更新每個訂單。
這些都與優化無關。不知道爲什麼這是標題?
[Branko在保存訂單數據方面有一個很好的觀點。但是,您不需要使數據庫完全版本化。您可以簡單地在從訂單引用的事物(如用戶和地址)上擁有「過期」標誌,但不再具有當前值。換句話說,你只需要兩個「版本」 - 當前和歷史。只要您在訂單表中顯式引用參考資料(因此您不需要通過用戶訪問交付地址,而是直接鏈接到訂單表中的地址表,可以使其工作。完全版本化數據庫,包括關係,是很多工作]
由於地址是真正的時間點數據;也就是說,這是訂單發貨的記錄,將發貨地址存儲在具有1對1關係的單獨表格中的優點是什麼?此外,爲什麼有一個過期的領域,當你只是查詢,看看訂單是否發貨?如果您以這種方式設計,您需要額外的觸發器或其他東西來確保您的「過期」標誌與訂單狀態保持一致。總的來說,我認爲這會產生比解決問題更多的問題。 – 2014-06-16 03:20:27
一般來說,你將最有可能要分開。
- 用戶
- 地址
- 訂貨信息
這是因爲用戶可以隨時間改變地址,但是舊地址需要保留,因爲他們有對他們的命令。另外,單個用戶可以從同一地址獲得多個訂單,因此我們將這些信息分開以減少重複。
不要重新發明輪子。訂單系統已經存在很多年了,最佳實踐已經確立。您可以創建一個地址簿,以便您的聯繫人可以有多個地址。聯繫人具有零對多地址。但是,在發貨時,請將訂單地址副本(或貨運實體)保留下來。將地址作爲時間點數據存儲以保持準確的歷史數據很重要。 Magento,Shopify,Quickbooks所有主要的會計和電子商務系統都有這樣的模型。 Saasu會計是一個例外。他們不會堅持地址與訂單,所以你必須爲每個訂單創建一個新的聯繫人,否則如果你修改了一個客戶地址,你最終會重寫歷史訂單上的地址。一個非常可怕的設計!
- 1. 數據庫優化
- 2. 數據庫優化
- 3. 優化數據庫查詢
- 4. 大數據庫優化
- 5. 優化數據庫 - 修復
- 6. MySQL數據庫優化
- 7. SQLite數據庫優化
- 8. 優化sql server數據庫
- 9. 數據庫表優化
- 10. 優化Mysql數據庫
- 11. 優化數據庫查詢
- 12. 數據庫優化問題
- 13. 優化InnoDB數據庫
- 14. 優化數據庫結構
- 15. mysql數據庫優化(table_cache)
- 16. 比薩數據庫優化
- 17. 數據庫查詢優化
- 18. 優化數據庫調用
- 19. 優化BerkeleyDB JE數據庫
- 20. 數據庫記錄訂單
- 21. 訂單數據庫設計
- 22. 優化的數據類型+簡單的數據庫設計
- 23. 通過查詢優化MySQL訂單
- 24. 優化SQL查詢取消訂單
- 25. SQL Server多索引訂單優化
- 26. 通過訂單優化MYSQL查詢
- 27. 優化查詢找到訂單
- 28. SSE微優化指令訂單
- 29. SQL Server優化:數據庫引擎優化顧問
- 30. 正常化的預訂數據庫
你正在使用哪種數據庫? – c0deNinja 2012-08-13 00:56:16
postgres sql db – 2012-08-13 00:57:44