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