更新记录,或者如果用户在处理订单之前编辑了他们的购物车,则删除并重新插入


update record, or delete and re-insert if the user edits their cart before processing the order

我有一个名为orders_products的表,其中包含与每个单独订单相关的所有产品。现在,如果客户决定编辑数量、属性,或者只是删除产品,那么在数据库中处理这种更改的最简单方法是什么?

订单_产品

id  |  quantity  |  fk_products_id  |  attributes  |  price  |  fk_orders_nr

fk_products_id是指我们产品表中的实际产品id
attributes是一个逗号分隔的字符串,id参考我们的属性表(属性可以是每个产品的角度、长度、直径等。如45度,左角度,20厘米长,43毫米直径)
fk_orders_nr是产品所属的实际订单。

因为我有一个class在客户端处理这个部分。根据订单id(fk_orders_nr),只DELETE所有相关产品,然后根据类中存储的内容重新插入和更新整个集合,这会更容易吗
或者有没有一种巧妙的方法可以直接在MySQL中处理这个问题?

我已经研究了on duplicate key updateignore,但它们似乎不符合我的需求。。

我需要检查实际的产品id是否存在,然后决定插入新的或更新现有的(可能是数量和/或可选属性),如果该产品不再在class的列表中,也可能会被删除。

写这个问题时。我认为删除整个集合,然后重新插入,可能是最简单的方法

这个数据库看起来设计得很糟糕。首先,我假设fk_products_id是指product_id。您不需要在列的名称中指定列是外键。

其次,我建议您保持所有列都是原子列,如中所示,没有多值。保持逗号分隔列表的attributes列将来会让你头疼,它还破坏了FIRST范式(最基本的范式)。

第三,您不需要(尽管有时它可能很有用)id作为连接表中的主键。您只需使用fk_products_idfk_orders_nr密钥中的复合主键即可。

写这个问题的时候。我认为删除整个集合,并且重新插入,可能是最简单的方法。

是的,这是通常的做法。

但我坚持认为您忽略了当前问题的所有内容,并从头开始重新设计数据库,特别注意规范化。这些是基本数据库设计标准,它们的存在是有原因的。希望你不会在为时已晚的时候了解原因。