6.1 问题的提出
-
背景:关系数据库设计时,如何避免数据冗余、插入异常、删除异常和更新异常?
-
目标:通过规范化理论,设计出高效、可靠的数据库模式。
6.2 规范化
规范化是通过分解关系模式,消除数据冗余和异常的过程。主要包括以下几个步骤:
6.2.1 函数依赖
-
定义:描述属性之间的依赖关系。例如,如果知道“学号”,就可以确定“姓名”,那么“姓名”函数依赖于“学号”。
-
符号表示:X→Y,表示属性集 X 决定属性集 Y。
-
示例:在学生表中,Sno→Sname。
6.2.2 码
-
候选码:能唯一标识元组的最小属性集。
-
主码:从候选码中选择一个作为主码。
-
外码:指向其他表主码的属性。
1. 候选码(Candidate Key)
-
定义:候选码是能够唯一标识关系中每一个元组(行)的最小属性集。
-
特点:
-
唯一性:候选码的值必须能够唯一标识一个元组。
-
最小性:候选码的属性集不能有冗余,即不能去掉任何一个属性而仍然保持唯一性。
-
-
示例:
-
在学生表中,假设有两个属性:
学号(Sno)
和身份证号(ID)
。如果学号
和身份证号
都能唯一标识一个学生,那么学号
和身份证号
都是候选码。
-
2. 主码(Primary Key)
-
定义:主码是从候选码中选择的一个属性集,用于唯一标识关系中的每一个元组。
-
特点:
-
唯一性:主码的值必须唯一。
-
非空性:主码的值不能为空(NULL)。<
-