连接操作的主键?

问题描述:

我从同学的帖子中读到: “在一个好的数据库设计中,通常使用主键来完成联接。” 真正使用主键作为良好设计所必需的谓词。我看不出如何。连接操作的主键?

谢谢你的帮助!

使用主键进行良好的数据库设计可能是一个争论。按照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. |