我一直认为表之间的关系是执行跨表操作所必需的,例如join。但我注意到我可以内部连接两个完全没有链接的表(没有任何外键)。
所以,我的问题:
提前谢谢。
答案 0 :(得分:4)
主要优点是外键约束确保了数据的关系完整性。即它阻止你删除在另一个表中有相关条目的东西
如果您在FK
上创建索引,则只会获得性能优势答案 1 :(得分:2)
即使未在给定数据库中声明,FK / PK关系也是存在的数据的逻辑特征。您可以精确地在表中包含FK以建立这些逻辑关系,并使它们以可以实现有用内连接的方式显示。如其他答案中所述,将FK声明为引用给定的PK具有防止孤立引用(引用不存在的PK的行)的优点。
索引可以加快连接速度。在复杂的查询中,优化器可能有很多要评估的策略,而且大多数策略都不会使用每个可用的索引。好的数据库系统有很好的优化器。在大多数数据库系统中,声明PK将在幕后创建索引。有时,但并非总是如此,在FK上创建索引,其结构与索引相同,PK将使优化器能够使用称为合并连接的策略。在某些情况下,合并连接可能比替代方案快得多。
当您连接显然不相关的表时,有几种情况。
一种情况是,您最终将表A中的每一行与表B中的每一行进行匹配。这称为笛卡尔连接。这需要很长时间,而且几乎总会产生意想不到的结果。十年来的一次我做了故意的笛卡尔加入。
另一种情况是两个表都包含相同的FK,并且您沿着这两个FK匹配。一个例子可能是ZIPCODE匹配。邮政编码实际上是邮局土地上某些主邮政编码表的FK,即使大多数使用邮政编码的人从未意识到这一点。
第三种情况是存在第三个表,一个联结表,包含引用所讨论的两个表中的每个表的FK。这实现了多对多关系。在这种情况下,你可能想要做的是一个带有两个内连接的三向连接,每个内连接都有一个FK / PK匹配作为连接条件。
要么我告诉了很多你已经知道的事情,要么通过关于关系数据库的基础教程你会受益。
答案 2 :(得分:1)
在关系数据库术语中, relation (或多或少)是您称为表的数据结构 - 它不是“表”之间存在的东西。关系模型的一个重要优点是有 no 预定义链接或其他导航结构限制了数据连接或以其他方式组合的方式。您可以随意在查询中加入关系(表格)。
您所询问的内容实际上称为外键约束。外键是一种约束,它通过防止在数据库中填充不一致的值来帮助确保数据完整性。