【问题标题】:Primary keys for Join operation?加入操作的主键?
【发布时间】:2015-07-19 18:54:42
【问题描述】:

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

感谢您的帮助!

【问题讨论】:

    标签: sql database join key predicate


    【解决方案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.   |
    

    【讨论】:

      猜你喜欢
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多