外键vs加入

and*_*van 31 sql

在表中使用外键是否更好?或者使用连接可以获得相同的结果?

Dan*_*llo 64

外键只是强制引用完整性的约束.您仍然需要使用JOIN来构建查询.

外键保证表中order_details具有order_id引用表的字段的行orders永远不会具有表order_id中不存在的值orders.外键不需要具有工作关系数据库(实际上MySQL的默认存储引擎不支持FK),但它们对于避免破坏关系和孤立行(即参照完整性)是必不可少的.

  • @sims:我不认为"参照完整性"是应用程序逻辑.在[ACID](http://en.wikipedia.org/wiki/ACID)中,C需要能够在数据库级别强制实施参照完整性. (9认同)
  • @sims:抽象数据库访问假定您可以强制执行数据库只能由该抽象或接口访问.根据我的经验,这是不可执行的."数据希望是免费/代码渴望有错误".最好将RI委托给DB,将其烘焙到ERD中.干酸,yum确实:-) (2认同)

lex*_*exu 26

FOREIGN KEYsJOINs 不做同样的事情!

  • A FOREIGN KEY强制数据完整性,确保数据在添加到数据库时确认某些规则.
  • JOIN通过提供如何选择数据的规则从数据库中提取/查询数据时使用A.

  • JOIN如果有FK,我的工作.

  • 如果您使用或不使用JOINs 提取数据,FK的工作.

结论: FK并JOIN不允许你实现同样的目标!