在用户可以下订单的数据库中,最好是有一个带地址的新表,或者每个订单在其标题中都有地址数据。数据库优化订单
数据库优化订单
回答
这不仅仅是用户(和它们的地址),但也对价格和你正在销售,可以订单后更改产品的其他信息被放置,然而为了本身必须保持不变。
一般来说,有2种方法是:您在订单(及其项目)需要
- 复制的一切。即使“主”数据发生更改,您仍然可以在可以使用的订单内有副本。
- “版本”或“历史”整个数据库,类似于this。
(1)是更“实用”的方法,但可能会导致数据的冗余(例如,当地址不变化,你仍然使得它的单独副本)。 (2)是更纯粹的方法,但可能需要更多的JOIN,并且通常会更复杂。
我想不出任何地址与订单在同一个表格中的原因,只不过它现在为您节省了少量的工作。
论点有一个单独的表包括:
能够与一个用户的多个送货地址,而不必通过所有订单搜索(关联,所以很容易向用户提供地址的下拉列表他们以前使用过)。
您可以使用相同的表计费和送货地址,避免重复
可以延长/更改地址是如何存储在未来的(例如,通过增加一个国家外地当你去国际),而不必更新每个订单。
这些都与优化无关。不知道为什么这是标题?
[Branko在保存订单数据方面有一个很好的观点。但是,您不需要使数据库完全版本化。您可以简单地在从订单引用的事物(如用户和地址)上拥有“过期”标志,但不再具有当前值。换句话说,你只需要两个“版本” - 当前和历史。只要您在订单表中显式引用参考资料(因此您不需要通过用户访问交付地址,而是直接链接到订单表中的地址表,可以使其工作。完全版本化数据库,包括关系,是很多工作]
由于地址是真正的时间点数据;也就是说,这是订单发货的记录,将发货地址存储在具有1对1关系的单独表格中的优点是什么?此外,为什么有一个过期的领域,当你只是查询,看看订单是否发货?如果您以这种方式设计,您需要额外的触发器或其他东西来确保您的“过期”标志与订单状态保持一致。总的来说,我认为这会产生比解决问题更多的问题。 – 2014-06-16 03:20:27
一般来说,你将最有可能要分开。
- 用户
- 地址
- 订货信息
这是因为用户可以随时间改变地址,但是旧地址需要保留,因为他们有对他们的命令。另外,单个用户可以从同一地址获得多个订单,因此我们将这些信息分开以减少重复。
不要重新发明轮子。订单系统已经存在很多年了,最佳实践已经确立。您可以创建一个地址簿,以便您的联系人可以有多个地址。联系人具有零对多地址。但是,在发货时,请将订单地址副本(或货运实体)保留下来。将地址作为时间点数据存储以保持准确的历史数据很重要。 Magento,Shopify,Quickbooks所有主要的会计和电子商务系统都有这样的模型。 Saasu会计是一个例外。他们不会坚持地址与订单,所以你必须为每个订单创建一个新的联系人,否则如果你修改了一个客户地址,你最终会重写历史订单上的地址。一个非常可怕的设计!
- 1. 数据库优化
- 2. 优化InnoDB数据库
- 3. 优化BerkeleyDB JE数据库
- 4. 数据库优化问题
- 5. 优化sql server数据库
- 6. MySQL数据库优化
- 7. 优化数据库结构
- 8. 优化数据库 - 修复
- 9. mysql数据库优化(table_cache)
- 10. 大数据库优化
- 11. 优化Mysql数据库
- 12. 数据库查询优化
- 13. 优化数据库调用
- 14. 优化数据库查询
- 15. 数据库记录订单
- 16. 订单数据库设计
- 17. 优化的数据类型+简单的数据库设计
- 18. SSE微优化指令订单
- 19. 优化SQL查询取消订单
- 20. 通过订单优化MYSQL查询
- 21. 正常化的预订数据库
- 22. SQL Server优化:数据库引擎优化顾问
- 23. 我们如何优化oracle数据库?
- 24. 数据库优化:计算排名
- 25. 优化SQL查询在MySQL数据库
- 26. sqlite数据库的优化技术
- 27. 数据库优化 - 编码字段
- 28. Laravel数据库查询优化
- 29. 优化数据库的搜索算法
- 30. Magento的:数据库的优化
你正在使用哪种数据库? – c0deNinja 2012-08-13 00:56:16
postgres sql db – 2012-08-13 00:57:44