2011-03-30 129 views
1
ALTER TABLE `phppos_items_taxes` 
ADD CONSTRAINT `phppos_items_taxes_ibfk_1` 
FOREIGN KEY (`item_id`) 
REFERENCES `phppos_items` (`item_id`) 
ON DELETE CASCADE; 

这是否表示删除phppos_items.id时,会删除phppos_items_taxesON DELETE CASCADE

我只是很难解释它。

+6

是的,那究竟是什么意思 – iluxa 2011-03-30 22:30:42

回答

1

是的,但是您是否真的需要物理删除该条目。有时候,最好在根实体中设置某种标志,告诉它是否应该作为删除/过滤

+0

因为?如果是这种情况,您可以使用'ON CASCADE RESTRICT'并将其设置在另一个表中。如果有人主动设置删除,显然不是操作,那么完全删除可能是安全的。 – 2011-03-30 22:44:23

+0

因为报告了分析数据,想象一下,例如,您正在创建订单并且您有桌面产品。现在订单是在同一时间发票!保持参考数据非常重要,例如produc.code和name以避免数据冗余。什么是产品不再可用于订购。什么,你会删除好的产品?我不这么认为;)您仍然需要在发票中使用该名称和代码。顺便说一句,在许多ORM中,你无法使用数据库引擎特有的功能来玩这么简单的功能。我不希望我的应用程序如此耦合到特定的数据库引擎 – 2011-07-09 14:11:56

+1

外键不是数据库特定的。大多数ORM支持SQL8标准,其中CASCADE是其中的一部分。我不确定你是否知道他们是数据库特定的。无论哪种情况,即使您设置了一个标志,您也应该使用RESTRICT,以防止某个不熟悉系统的人从“父表”中删除ID,同时“归档”的订单仍然存在。 – 2011-07-12 22:29:40