这是我的情况。我有以下表格:
当管理员进入编辑产品属性(例如“颜色”)时,他可能会错误地删除该属性,然后将其添加回来。如果已为该产品下订单,则当他删除并重新添加该属性时,其产品属性表中的ID将更改。这使得Order Product Attribute引用了一个不存在的属性ID(尽管该属性仍然存在)。
解决此问题的最佳方法是什么?也许我只是需要对这个问题有不同的看法。
注意:如果在编辑产品时刷新所有属性并重新添加当前所选属性(可能相同),也会出现(同样重要)问题。
答案 0 :(得分:3)
不允许“错误删除”...只需在产品属性表中将“有效”或“无效”标记作为列。
您始终可以使用订单而不是属性ID保存属性。如果您的设计属性ID不断变化,那么您的订单没有历史有效性。制作产品的新“版本”并在更改时将旧版本设置为非活动状态,或者在订单中保存产品状态,以便获得一些历史记录。
答案 1 :(得分:3)
使用innodb作为表类型,并为依赖表添加适当的外键关系。然后,您将无法意外删除您依赖的行。
当然,如果你仍然希望(在某些情况下)允许这样做,你可以将foreign_key_ check设置为off。
答案 2 :(得分:0)
向表中添加触发器以防止删除正在使用的属性?
OR
向该表添加已删除的标志并设置标志,而不是实际删除该行。将IsDeleted = False
添加到访问属性表以进行选择的任何查询的where子句中。