加入操作的主键?

时间:2015-07-19 18:54:42

标签: sql database join key predicate

我从同学的帖子中读到: “通常在良好的数据库设计中使用主键完成连接。” 确实使用主键作为良好设计所必需的谓词。我看不出怎么样。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

使用主键进行良好的数据库设计可能是一个争论。经典地根据RDBMS指南,建议为良好的数据库设计创建主键。但是现在有一天趋势是不要在数据库方面施加太多限制来提高性能,而是在业务层上进行验证(不确定主键是否也是如此)。

现在回答你的问题, 主键对于连接操作不是必需的,但是必须使用唯一标识主表记录的列,否则它会生成虚假记录。


| dept| sub_dept | dsc         |
| CS  | CS       | Computer sc.|
| CS  | IT       | Info Tech.  | 

学生

| Name | age | sex  | dept | sub_dept|
| abcd | 025 | M    | CS   | CS      |
| wxyz | 023 | M    | CS   | IT      |

现在,如果您加入sub_dept上的表格,您将获得正确的结果。

select s.name, s.age, s.sex, d.dsc from student s, department d where  

s.sub_dept = d.sub_dept

| Name | age | sex | dsc            |
| abcd | 025 | M   | Computer Sc.   |
| wxyz | 023 | M   | Computer Sc.   |

如果你加入dept列上的表,你会得到虚假的元组(2个额外的行)

select s.name, s.age, s.sex, d.dsc from student s, department d where s.dept = d.dept

| Name | age | sex | dsc            |
| abcd | 025 | M   | Computer Sc.   |
| wxyz | 023 | M   | Computer Sc.   |


| abcd | 025 | M   | Info Tech.     |
| wxyz | 023 | M   | Computer Sc.   |