加入没有钥匙?

时间:2010-12-17 14:03:53

标签: tsql sql-server-2008

在T-SQL(SQL Server 2008)中,通过无键列(无关系)INNER JOIN两个表在技术上是否正确?谢谢。

4 个答案:

答案 0 :(得分:4)

是。我经常和儿童桌子的孩子一起绕过“中间”桌子。

外键是数据完整性的约束:与查询公式无关。除非你不关心数据质量和完整性,否则你应该拥有它们。

答案 1 :(得分:2)

您可以加入具有相同数据的任何两个字段(并且它们也应该是相同的数据类型)。如果字段已编制索引,则除非您要加入两个varchar(4000)字段,否则不会出现性能问题。如果您使用的是EAV模型,那么当您的数据库设计不佳并且一列专门用于多个目的时,您甚至可能需要这样做。

但是,在这种情况下,您将无法获得数据完整性。如果没有外键来强制执行规则,您可能会发现相关表的值与父表没有匹配。这可能导致在应该看到的查询中看不到的记录或者无法正确解释的记录。因此,在适用的地方设置外键是一种很好的做法。

答案 2 :(得分:1)

它会工作,虽然可能效率不高......如果可以的话,你一定要创建外键。

答案 3 :(得分:1)

技术上它会起作用。没有问题。但是,有时查询计划生成器将使用FK来帮助更好地使用索引。但是,从设计的角度来看,这不是一个好主意。你应该尽可能多地使用FK,特别是如果你想要去ORM路线。