处理已删除的表行的最佳做法?

时间:2009-06-18 02:19:18

标签: mysql sql

这是我的情况。我有以下表格:

  • 产品
  • 产品属性
  • 订购产品(引用product_id和order_id),
  • 订购产品属性(引用order_product和product_attribute)。

当管理员进入编辑产品属性(例如“颜色”)时,他可能会错误地删除该属性,然后将其添加回来。如果已为该产品下订单,则当他删除并重新添加该属性时,其产品属性表中的ID将更改。这使得Order Product Attribute引用了一个不存在的属性ID(尽管该属性仍然存在)。

解决此问题的最佳方法是什么?也许我只是需要对这个问题有不同的看法。

注意:如果在编辑产品时刷新所有属性并重新添加当前所选属性(可能相同),也会出现(同样重要)问题。

3 个答案:

答案 0 :(得分:3)

不允许“错误删除”...只需在产品属性表中将“有效”或“无效”标记作为列。

您始终可以使用订单而不是属性ID保存属性。如果您的设计属性ID不断变化,那么您的订单没有历史有效性。制作产品的新“版本”并在更改时将旧版本设置为非活动状态,或者在订单中保存产品状态,以便获得一些历史记录。

答案 1 :(得分:3)

使用innodb作为表类型,并为依赖表添加适当的外键关系。然后,您将无法意外删除您依赖的行。

当然,如果你仍然希望(在某些情况下)允许这样做,你可以将foreign_key_ check设置为off。

答案 2 :(得分:0)

向表中添加触发器以防止删除正在使用的属性?

OR

向该表添加已删除的标志并设置标志,而不是实际删除该行。将IsDeleted = False添加到访问属性表以进行选择的任何查询的where子句中。