思维导图:
2.3.1 实体完整性![](https://i-blog.csdnimg.cn/blog_migrate/e5f38fc9255dbf6c5fe01ed0d99d2a38.jpeg)
**笔记 2.3.1 实体完整性**
---
**1. 定义:**
实体完整性确保关系数据库中的每个元组都是唯一的,可区分的。
**2. 规则2.1 实体完整性规则:**
- 若属性A(可以是单个或多个属性组成)是基本关系R的主属性,则A不能取空值。
- 空值定义:表示“不知道”、“不存在”或“无意义”的值。更多关于空值的处理将在3.6节中讨论。
**3. 例子:**
- 学生(学号, 姓名, 性别, 专业号, 年龄):其中“学号”是主码,因此“学号”不能为null。
- 选修(学号, 课程号, 成绩):其中“学号、课程号”组成主码,因此这两个属性都不能为null。
**4. 实体完整性规则的说明:**
- **(1)** 仅适用于基本关系:每个基本表通常与现实世界的实体集相对应,例如学生表对应学生集合。
- **(2)** 实体的唯一性:在现实世界中,每个实体都是独立且唯一的。例如,每个学生都是独特的。
- **(3)** 主码为唯一标识:在关系模型中,使用主码确保唯一性。
- **(4)** 主属性不可为空:如果主属性为空,则表示存在一个无法区分的实体,违反了实体的唯一性要求。
---
总结:实体完整性是关系数据库中的核心概念,确保每个元组都是唯一且可区分的,避免重复或无法区分的数据条目。主码和其属性在此起到关键作用。
2.3.2 参照完整性![](https://i-blog.csdnimg.cn/blog_migrate/be738a7258f2c0df62cd5d1c6cf386c7.jpeg)
老师说过了:
上图中D#可以取空值,但是不能取05这是因为取的时候要取的是父表即Dept中主码存在的值如{01,02,03,04} 。简言之可以没有分配即空值,如果不取空值那就一定要取父表主码中存在的值。
---
**1. 概念:**
在现实世界中,实体之间经常存在联系。在关系模型中,这种联系通常通过关系间的属性引用来表示。
**2. 引用的例子:**
- **[例2.1]** 学生与专业之间的关系表示学生的“专业号”引用专业的主码“专业号”。
- **[例2.2]** 选修关系中的“学号”引用学生的主码“学号”,并且“课程号”引用课程的主码“课程号”。
- **[例2.3]** 学生关系中的“班长”属性引用了同一关系的“学号”属性。
**3. 外码定义(定义2.5):**
- 若属性F是基本关系R的属性,并非R的主码,但与基本关系S的主码K相对应,那么称F为R的外码。
- R被称为参照关系,而S被称为被参照关系或目标关系。
- 外码和相应的主码必须定义在相同的域上。
**4. 参照完整性规则:**
- 若属性F是基本关系R的外码,与基本关系S的主码K相对应,则R中每个元组在F上的值必须:
- 取空值;
- 或等于S中某个元组的主码值。
**5. 参照完整性示例:**
- **[例2.1]** 学生关系中的“专业号”:
- 可以取空值,代表学生尚未被分配专业;
- 或者取非空值,但这个值必须存在于专业关系中。
- **[例2.2]** 选修关系中的“学号”和“课程号”:
- 由于这两个属性都是主属性,不能取空值;
- 它们的值必须存在于学生和课程关系中。
- **[例2.3]** “班长”属性:
- 可以取空值,代表班级尚未选出班长;
- 或者取非空值,但这个值必须存在于学生关系中。
**6. 注意:**
外码与相应的主码不必同名。但在实际应用中,通常为了方便识别,当它们属于不同关系时,会取相同的名字。
---
总结:参照完整性是关系数据库中的重要概念,确保数据的一致性和完整性。外码和主码之间的引用关系是这一概念的核心。
2.3.3 用户定义的完整性![](https://i-blog.csdnimg.cn/blog_migrate/a3cdb10f5a5f4973f9800944241f6268.jpeg)
**2.3.3 用户定义的完整性**
---
**定义**:
- 关系数据库系统不仅要支持实体完整性和参照完整性,但在某些应用环境下,需要更具体的约束条件。用户定义的完整性是为特定关系数据库设定的约束条件,这些条件根据应用的特定需求而定义。
**重要性**:
- 反映了某一具体应用涉及的数据的语义要求。
- 确保了数据库中的数据准确、可靠,并与现实世界的业务规则保持一致。
**应用举例**:
1. **唯一性**:某些属性可能需要具有唯一的值,即不允许出现重复值。
2. **非空属性**:某些应用场景下,一些属性不能为空。如例2.1中,学生的姓名不能取空值。
3. **值范围**:属性的取值可能需要在特定的范围内,例如学生的成绩应在0~100之间。
**关系模型的责任**:
- 提供定义这些约束的机制,并能自动检验它们。这样,应用开发人员可以集中精力于应用逻辑,而不是数据验证。
**早期的问题**:
- 早期的关系数据库系统缺乏这些完整性的定义和检验机制。这导致应用开发人员必须在应用程序中进行验证,增加了编程的复杂性。
**总结**: 用户定义的完整性是为了确保数据库中的数据满足特定应用的语义和业务规则要求。现代的关系数据库系统通常提供了相关的工具和机制,以帮助用户定义和维护这些完整性规则。
总结:
**关系的完整性总结:**
---
**重点**:
1. **实体完整性**:每个基本关系的主码属性必须有值,且这个值不能是空(NULL)。
2. **参照完整性**:确保数据间的引用关系。如果一个关系中的某属性引用了另一个关系的主键,则这个属性中的值必须是空值或者存在于被引用关系的主键中。
3. **用户定义的完整性**:根据具体的应用需求定义的约束条件,例如值的范围、唯一性或某属性的非空条件等。
**难点**:
1. **理解参照完整性的应用**:在复杂的数据库结构中,多个关系间可能存在多种参照关系,理解和管理这些关系可能是一个挑战。
2. **维护完整性规则**:随着业务需求的变化和发展,完整性规则可能需要调整,如何在不破坏现有数据的前提下调整完整性规则是个难点。
3. **用户定义的完整性与实际业务需求的匹配**:确保定义的完整性约束真实地反映了业务需求,并且没有遗漏或错误。
**易错点**:
1. **不一致的外键与主键匹配**:有时可能会忘记确保外键的值与对应关系的主键值匹配。
2. **误删除引用数据**:删除被其他关系引用的数据,而不先处理引用它的数据,会导致参照完整性被破坏。
3. **不完整的用户定义的完整性规则**:可能会遗漏一些业务规则或者定义了不恰当的完整性约束。
4. **混淆空值与默认值**:有时可能会误解空值(NULL)和某些默认值之间的区别,这可能导致数据的不一致性。
**总结**:关系的完整性是确保关系数据库中数据质量和准确性的关键。理解和维护这些完整性规则,尤其是在复杂的数据模型中,是数据库设计和管理的核心任务。