当前位置: 首页 > 面试题库 >

外键-他们为我做什么?

邢乐
2023-03-14
问题内容

我正在构建一个小型应用程序,并在表之间建立外键关系。但是我对为什么我真的需要这个感到困惑?有什么好处-
在编写不需要执行任何联接的查询时,它对我有帮助吗?这是我的数据库的示例片段:

+-------------------+
| USERS             |
+-------------------+
| user_id           |
| username          |
| create_date       |
+-------------------+

+-------------------+
| PROJECTS          |
+-------------------+
| project_id        |
| creator           |
| name              |
| description       |
+-------------------+

两者之间存在关键关系usersuser_idprojectscreator

我可以执行这样的查询吗?

SELECT * FROM PROJECTS WHERE USERS.username = "a real user";

既然MySQL应该知道表之间的关系?如果不是,那么外键在数据库设计中的真正功能是什么?


问题答案:

外键提供引用完整性。外键列中的数据经过验证-该值只能是外键中定义的表和列中已经存在的值。这对于阻止“不良数据”非常有效-某人无法输入所需内容-
数字,ASCII文本等。这意味着数据已被规范化-
重复值已被识别并隔离到自己的表中,因此无需担心关于在文本中区分大小写的问题…并且值是一致的。这就引出了下一部分-外键是用于将表连接在一起的工具。

您对用户拥有的项目的查询将无法工作-USERS当查询中没有对该表的引用时,您将引用该表中的一列,并且在将其链接到PROJECTS表之前,没有子查询可用于获取该信息。您真正使用的是:

SELECT p.*
   FROM PROJECTS p
   JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'


 类似资料:
  • 问题内容: 好的,假设我们有两个表,和。在评论中,我们有一列,它表示哪个用户键入了该特定评论。为什么我们需要将其指定为外键?如果我们不这样做,它将仍然有效。我们指定主键,因为据我所知,它可以使查询速度更快(我们只需要搜索一行,而当我们没有主键/索引时,则必须遍历所有行)。这只是一种良好的编码习惯吗? 问题答案: 使用外键时,您将获得: 数据的完整性 更快的查询。 用户: 用户ID: 1个 2个 3

  • 介绍 你好,我是 Franklin Risby 教授,很高兴认识你。接下来我们将共度一段时光了,因为我要教你一些函数式编程的知识。好了,关于我就介绍到这里,你怎么样?我希望你已经熟悉 JavaScript 语言了,关于面向对象也有一点点的经验了,而且自认为是一个合格的程序员。希望你没有昆虫学博士学位也能找到并杀死一些臭虫(bug)。 我并不假设你之前有任何函数式编程相关的知识——我们都知道假设的后

  • 本文向大家介绍为什么我们要做三份 Webpack 配置文件,包括了为什么我们要做三份 Webpack 配置文件的使用技巧和注意事项,需要的朋友参考一下 在知乎上我们常常会看到有同学发问:BAT 等大型网站的前端工程是如何组织管理的?这的确是一个可以发散的很广的 Q&A,我想如果要我回答这个问题,不如先从 Webpack 配置说起。 时至今日,Webpack 已经成为前端工程必备的基础工具之一,不仅

  • 问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严

  • 问题内容: 我是一个完整的初学者。 我已阅读了有关解决方案的Google文档。我在互联网上搜索了同样的内容。 但。一切似乎都是技术性的。 据我了解,.Flush有助于在功能出现时立即执行这些功能,而无需将它们捆绑在一起。 我对吗? 如果不是的话,外行人的含义是什么?并请举一个简单的例子。谢谢。 问题答案: 程序员在希望确保在继续之前将先前代码的输出和/或效果写入电子表格时会使用。如果您不这样做,则

  • 问题内容: 在PostgreSQL中,我有一个数据库,我打算进行以下表声明: 一切正常,除了在创建最后一个表(更正)时出现以下错误: 错误:没有唯一的约束匹配给定键的引用表“提交” 我对更正表的打算是对每个提交都有唯一的更正,但是一个提交可以(也可以不)具有更正。 我该如何解决这个错误?是设计问题还是表声明错误? 问题答案: 外键约束不关心所引用的列是否在引用另一列本身。但是引用的列 必须 是唯一