我记得听过Joel Spolsky在播客014中提到他几乎没用过外键(如果我没记错的话).但是,对我而言,在整个数据库中避免重复和后续数据完整性问题似乎非常重要.
人们有一些坚实的理由为什么(避免与Stack Overflow原则一致的讨论)?
database database-design referential-integrity foreign-keys data-integrity
我以前主要使用MyISAM表,它不支持外键.看看堆栈溢出,我没有找到一个很好的,简洁的解释外键实际上在做什么.我最感兴趣的是连接表,你会有这样的模式:
customers
id category_id
products
id category_id
categories
id
customerproducts
customer_id product_id
Run Code Online (Sandbox Code Playgroud)
如果我在客户产品上有外键,它将确保只有有效的客户和只有有效的产品进入该表,但是如果我尝试将电话类别的产品添加到仅指定为对复印机感兴趣的客户?这会导致外键约束被违反吗?