作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
候选码、主码、全码、外码、主属性、主键、主关键字和非主属性是数据库设计中的关键概念,它们在数据库的逻辑设计和物理实现中扮演着重要的角色。下面我将逐一解释这些概念,并通过表格形式展示它们之间的关系和区别。
概念 | 解释 | 例子 |
---|---|---|
候选码 | 一个关系中能唯一标识每个元组的属性集合,候选码的任一子集不能唯一标识元组。一个关系可以有多个候选码。 | 学生表中的学号、身份证号都可以作为候选码,因为它们都能唯一标识一个学生。 |
主码 | 在一个关系的所有候选码中选定一个作为主要的标识手段,称为主码。 | 如果选择学号作为学生表的主码,则每个学生将通过学号进行唯一标识。 |
全码 | 如果一个关系中的所有属性集合都是候选码,即整个属性集合才能唯一标识每个元组,这样的码称为全码。 | 在一个只有两个属性且都需要用来唯一标识元组的关系中,这两个属性的集合就是全码。 |
外码 | 一个关系中的属性或属性集,它与另一个关系的候选码相对应,用于实现两个关系之间的引用。 | 学生表中的班级编号可能是外码,它对应班级表中的班级编号候选码,用于关联学生和班级。 |
主属性 | 包含在任何一个候选码中的属性称为主属性。 | 如果学号和身份证号都是候选码,那么学号和身份证号都是主属性。 |
主键 | 在关系型数据库中,主键是一种约束,它确保了数据库表中每条记录的唯一性。通常选择一个候选码作为主键。主键不允许重复,且不允许为NULL。 | 如果学号被定义为主键,则每个学生的学号都是唯一的,且学号字段不允许为空。 |
主关键字 | 主键中的属性称为主关键字。 | 如果学号是主键,那么学号就是主关键字。 |
非主属性 | 不包含在任何候选码中的属性称为非主属性。 | 如果学生表的候选码是学号和身份证号,那么学生的姓名、年龄等就是非主属性。 |
答案与讲解: