【发布时间】:2020-08-08 13:54:32
【问题描述】:
我正在开发一个用于在线订购产品的应用程序。我将首先向您展示部分 ER 图,然后进行解释。
这里的“products”是食品,它们将放在fresh_products 表中。如您所见,fresh_product 由product species、category、type、size 和product grade 组成。
然后当我下订单时,order id 和order_status 将保存在order 表中。所有订购的商品都将保存在order_item 表中。在order_item 表中,您可以看到我与fresh_products 有直接 连接。
在某些时候,管理层将决定更改现有的fresh_products。例如,让我们以鱼制品为例,例如 金枪鱼。此鱼品有一个名为 Loin(用 Loin 捕捞)的类别,在一段时间后管理层决定将其删除或重命名,因为他们不再用 Loin 捕捞。
现在,我的设计会因为上述变化而受到影响。为什么?当您更改任何fresh_product 字段时,它将直接影响保存已订购商品信息的order_item。因此,如果您重命名 Loin ,则所有具有 Loin 的 order_items 现在都将链接到错误的新名称。如果您决定删除fresh_product,您也不能这样做,因为现有的订单历史记录绑定到该fresh_product。
我的建议
作为这个问题的解决方案,我正在考虑从order_item 中删除fresh_products 的关系。然后,我将String字段添加到order_item中,代表fresh_products的所有字段,例如productType、prodyctCategory等等。
现在我与fresh_products 没有直接联系,但我拥有所需的所有信息。同时,anyfresh_product的物品可以在order_item已经购买的物品进行任何更改,而不影响已经购买的物品。
我的问题是,我的建议是解决此问题的最佳方法吗?如果你有更好的解决方案,我很乐意。
【问题讨论】:
-
不可能有那么多变化。审计表怎么样,你保存旧的字段值和你的字段名称,这样你就可以在结果集中重新创建它在订单时所在的状态,但这也意味着保存另一个审计也是。
-
您不应“更改”现有产品。您应该添加一个新的。
-
@nbk 我认为您指的是与我建议的设计相同的设计?
-
@HomeIsWhereThePcIs 是的,我也听说过。但有时你必须改变一些东西,对吗?
-
我不明白您为什么要查看旧数据,例如对鱼的描述。可能在账单中,但因此您无需购买任何开销,保存所有可能为子孙后代更改的产品数据,您将产生巨大的开销
标签: java mysql database database-design entity-relationship