我正在构建一个小型应用程序,并在表之间建立外键关系。但是我对为什么我真的需要这个感到困惑?有什么好处- 在编写不需要执行任何联接的查询时,它对我有帮助吗?这是我的数据库的示例片段:
+-------------------+ | USERS | +-------------------+ | user_id | | username | | create_date | +-------------------+ +-------------------+ | PROJECTS | +-------------------+ | project_id | | creator | | name | | description | +-------------------+
两者之间存在关键关系users。user_id和projects。creator
users
user_id
projects
creator
我可以执行这样的查询吗?
SELECT * FROM PROJECTS WHERE USERS.username = "a real user";
既然MySQL应该知道表之间的关系?如果不是,那么外键在数据库设计中的真正功能是什么?
外键提供引用完整性。外键列中的数据经过验证-该值只能是外键中定义的表和列中已经存在的值。这对于阻止“不良数据”非常有效-某人无法输入所需内容- 数字,ASCII文本等。这意味着数据已被规范化- 重复值已被识别并隔离到自己的表中,因此无需担心关于在文本中区分大小写的问题…并且值是一致的。这就引出了下一部分-外键是用于将表连接在一起的工具。
您对用户拥有的项目的查询将无法工作-USERS当查询中没有对该表的引用时,您将引用该表中的一列,并且在将其链接到PROJECTS表之前,没有子查询可用于获取该信息。您真正使用的是:
USERS
PROJECTS
SELECT p.* FROM PROJECTS p JOIN USERS u ON u.user_id = p.creator WHERE u.username = 'John Smith'