我有一个名为orders_products
的表,其中包含与每个单独订单相关的所有产品。现在,如果客户决定编辑数量、属性,或者只是删除产品,那么在数据库中处理这种更改的最简单方法是什么?
订单_产品
id | quantity | fk_products_id | attributes | price | fk_orders_nr
fk_products_id
是指我们产品表中的实际产品idattributes
是一个逗号分隔的字符串,id参考我们的属性表(属性可以是每个产品的角度、长度、直径等。如45度,左角度,20厘米长,43毫米直径)fk_orders_nr
是产品所属的实际订单。
因为我有一个class
在客户端处理这个部分。根据订单id(fk_orders_nr
),只DELETE
所有相关产品,然后根据类中存储的内容重新插入和更新整个集合,这会更容易吗
或者有没有一种巧妙的方法可以直接在MySQL中处理这个问题?
我已经研究了on duplicate key update
和ignore
,但它们似乎不符合我的需求。。
我需要检查实际的产品id是否存在,然后决定插入新的或更新现有的(可能是数量和/或可选属性),如果该产品不再在class
的列表中,也可能会被删除。
写这个问题时。我认为删除整个集合,然后重新插入,可能是最简单的方法
这个数据库看起来设计得很糟糕。首先,我假设fk_products_id
是指product_id
。您不需要在列的名称中指定列是外键。
其次,我建议您保持所有列都是原子列,如中所示,没有多值。保持逗号分隔列表的attributes
列将来会让你头疼,它还破坏了FIRST范式(最基本的范式)。
第三,您不需要(尽管有时它可能很有用)id
作为连接表中的主键。您只需使用fk_products_id
和fk_orders_nr
密钥中的复合主键即可。
写这个问题的时候。我认为删除整个集合,并且重新插入,可能是最简单的方法。
是的,这是通常的做法。
但我坚持认为您忽略了当前问题的所有内容,并从头开始重新设计数据库,特别注意规范化。这些是基本数据库设计标准,它们的存在是有原因的。希望你不会在为时已晚的时候了解原因。