不使用ondelete或onupdate时的外键优势

时间:2014-07-09 20:41:50

标签: php mysql sql foreign-keys rdbms

如果我没有设置foreign key relationship,拥有delete or update constraints有什么好处?

假设我有一个用户可以发布用于转售的项目的表格。

item_id  item_product_id   item_title            other_fields
1        1                 New TV for sale       ...
1        1                 Old TV for sale       ...
1        2                 Radio for sale        ...

产品表将是:

product_id   product_name
1            TV
2            Radio

现在,如果从product移除product table,我也不希望删除这些项目。用户可以看到他的商品不再存在,并且可以选择另一个最合适的产品。所以我的问题是 - 如果这是我的structure and logic,使用foreign keys链接项目和产品表是否有任何好处?

或者,如果商品中有foreign key条目,我是否能够从产品中删除?

2 个答案:

答案 0 :(得分:1)

一个优点是您的RDMS不会让您在开始时插入无效数据。如果没有ID为5的产品,那么您将完全无法为其创建项目(无论是来自mysql命令行的脚本还是)。这属于数据完整性的标题。

此外,您可能值得结帐this question

答案 1 :(得分:0)

  

或者,如果项目中有外键条目,我甚至可以从产品中删除吗?

不,你不会,除非你指定ON DELETE CASCADEON DELETE SET NULL

除非items中有匹配的记录,否则您无法插入products