【发布时间】:2011-03-26 22:14:40
【问题描述】:
我在想,
我在 MySQL 中使用约束作为外键的动机是什么,因为我确信我可以控制添加的类型?
它会提高性能吗?
【问题讨论】:
-
类似问题已经回答,见stackoverflow.com/questions/1876013 有很多讨论:D
标签: sql mysql foreign-keys
我在想,
我在 MySQL 中使用约束作为外键的动机是什么,因为我确信我可以控制添加的类型?
它会提高性能吗?
【问题讨论】:
标签: sql mysql foreign-keys
一个原因是一组具有外键约束的表不能分片到多个数据库中。
【讨论】:
Foreign keys 强制执行referential integrity。这些约束保证表order_details 中具有引用orders 表的字段order_id 的行永远不会有order_id 值在orders 表中不存在。
外键不需要有一个工作的关系数据库(事实上MySQL's default storage 引擎不支持外键),但它们对于避免破坏关系和孤立行(即参照完整性)绝对是必不可少的。 ACID 中的 C 需要能够在数据库级别强制执行参照完整性。
至于您对性能的担忧,通常会有性能成本,但可能可以忽略不计。我建议放入所有外键约束,并且仅在遇到无法通过其他方式解决的实际性能问题时才尝试不使用它们。
【讨论】: