加入操作的主键?
Primary keys for Join operation?
我读了一个同学post:
“在良好的数据库设计中,连接通常是使用主键完成的。”
真正使用主键作为良好设计所必需的谓词。我看不出如何。
感谢您的帮助!
在良好的数据库设计中使用主键可能是一个争论。通常根据 RDBMS 指南,建议为良好的数据库设计创建主键。但现在有一种趋势是不在数据库端施加太多限制以提高性能,而是在业务层进行验证(不确定主键是否也是如此)。
现在回答你的问题,
主键对于连接操作不是强制性的,但是必须使用唯一标识主记录的列table,否则它会生成虚假记录。
部门
| 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 上加入 table,您将获得正确的结果。
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 列上加入 tables,您将得到虚假的元组(额外 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. |
我读了一个同学post: “在良好的数据库设计中,连接通常是使用主键完成的。” 真正使用主键作为良好设计所必需的谓词。我看不出如何。
感谢您的帮助!
在良好的数据库设计中使用主键可能是一个争论。通常根据 RDBMS 指南,建议为良好的数据库设计创建主键。但现在有一种趋势是不在数据库端施加太多限制以提高性能,而是在业务层进行验证(不确定主键是否也是如此)。
现在回答你的问题, 主键对于连接操作不是强制性的,但是必须使用唯一标识主记录的列table,否则它会生成虚假记录。
部门
| 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 上加入 table,您将获得正确的结果。
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 列上加入 tables,您将得到虚假的元组(额外 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. |