在用户可以下订单的数据库中,最好是有一个带地址的新表,或者每个订单的标题中都有地址数据。
答案 0 :(得分:5)
一般来说,您很可能想要分开:
这是因为用户可以随时间更改地址,但需要保留旧地址,因为他们有针对它们的订单。此外,单个用户可以从同一地址获得多个订单,因此我们将这些信息分开以减少重复。
答案 1 :(得分:5)
这不仅仅是关于用户(及其地址),还有关于您销售的产品的价格和其他信息,可以在>强调订单后更改,但订单本身必须保留完好。
通常,有两种方法:
(1)是更“实用”的方法,但可能导致数据冗余(例如,当地址不更改时,您仍然会单独复制它。)
(2)是更“纯粹”的方法,但可能需要更多的JOIN,并且通常更复杂。
答案 2 :(得分:0)
我想不出地址与订单在同一个表格中的任何原因,除了它现在为您节省了少量工作。
拥有单独表格的参数包括:
能够将多个交付地址与用户关联,而无需搜索所有订单(因此很容易为用户提供他们之前使用过的地址下拉列表)。
您可以使用相同的表格进行结算和投放地址,避免重复
您可以扩展/更改地址在未来的存储方式(例如,在您去国际时添加国家/地区字段),而无需更新每个订单。
这与优化无关。不知道为什么会出现在标题中?
[Branko对保留订单数据有一个很好的观点。但是,您不需要使数据库完全版本化。你可以简单地在订单引用的东西上有一个“过期”标志(比如用户和地址)但不再有当前值。换句话说,你只需要两个“版本” - 当前和历史。只要您在订单表中明确地引用(因此您不通过用户转到交付地址,而是直接从订单表链接到地址表,这可以使其工作。完全版本化数据库,包括人际关系,是一项很多工作。]
答案 3 :(得分:0)
不要重新发明轮子。订单系统已经存在很长时间,并且已经建立了最佳实践。您可以创建一个地址簿,以便您的联系人可以拥有多个地址。联系人具有零对多地址。但是,在发货时,请使用订单(或发货实体)保留地址的副本。将地址存储为订单中的时间点数据以保持准确的历史数据非常重要。 Magento,Shopify,Quickbooks所有主要的会计和电子商务系统都有这样的模型。 Saasu会计是一个例外。他们不会在订单中保留地址,因此您必须为每个订单创建一个新联系人,否则如果您修改了客户地址,则最终会在历史订单上重写该地址。一个非常可怕的设计!