前提说明
键字=码字,所以 主键=主码=主关键字,候选键=候选码=候选关键字
1.1 基本概念
元组:表中的一行记录就是元组
码是数据系统中的基本概念。所谓码就是能唯一标识实体的属性,他是整个实体集的性质,而不是单个实体的性质。
例如:学生是一个实体,则学生的集合是一个实体集。学生(实体)具有多个属性:学号、姓名、性别、年龄、系别、专业、身份证号等。最简单情况下,单个属性是码.最极端的情况下,整个属性组是码,称为全码.
名称 | 概念 |
---|---|
全码(键) | 所有属性集 |
超码(键) =码 | 能够唯一标识一条记录的属性或属性集 |
候选码(键) | 能够唯一标识一条记录的最小属性集,候选键是没有多余属性的超键。举例:学生ID是候选码,那么含有候选码的都是码。 |
主码(键) | 某个能够唯一标识一条记录的最小属性集(是从候选码里人为挑选的一条) |
主属性 | 主属性是候选码属性的并集 |
非主属性 | 不包含在候选码中的属性称为非主属性。 非主属性是相对于主属性来定义的 |
外键 | 子数据表中出现的父数据表的主键,称为子数据表的外键 |
代理键 | 当不适合用任何一个候选键作为主键时(如数据太长等),添加一个没有实际意义的键作为主键,这个键就是代理键。(如常用的序号1、2、3) |
自然键 | 自然生活中唯一能够标识一条记录的键(如身份证) |
1.2 例子
课本上的定义过于笼统,下面我用一张学生成绩信息表给大家详细的说一下:
学生成绩信息表中有(学号、姓名、性别、年龄、系别、专业、身份证号)
超键/码:
学生表中含有学号或者身份证号的任意组合都为此表的超键。如:(学号)、(学号,姓名)、(学号,性别)等
- 学号唯一,所以是一个超键(身份证同理)
- (学号,性别)唯一,所以是一个超键
- (学号,年龄)唯一,所以是一个超键
- (学号,性别,年龄)唯一,所以是一个超键
候选键:
- 学号唯一,而且没有多余属性,所以是一个候选键(身份证同理)
- (学号,性别)唯一,但是单独学号一个属性就能确定这个人是谁,所以性别这个属性就是多余属性,所以(姓名,性别)不是候选键
- (学号,年龄),(学号,性别,年龄)同上,也不是候选键
主键:
主键就是候选键里面的一个,是人为规定的,例如学生表中,我们通常会让“学号”做主键,学号能唯一标识这一个元组。
外键:
外键就很简单了,假如我们还有一个教师表,每个教师都有自己的编号,假设老师编号在老师这个层次中是主键,在学生表中它就是外键。
1.3 函数依赖
在关系中,包括在任何候选码中的属性称为主属性;不包括在任何候选码中的属性称为非主属性。
函数依赖只分析关系中的
非
主
属
性
对
主
属
性
之
间
的
依
赖
关
系
\color{blue}{非主属性对主属性之间的依赖关系}
非主属性对主属性之间的依赖关系,并不分析主属性对主键(码)的依赖关系。
名称 | 含义 |
---|---|
部分函数依赖 | 设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X |
完全函数依赖 | 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X |
传递函数依赖 | 设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X |
1.4 例子
学生成绩信息表中有(学号、姓名、性别、年龄、系别、专业、课程号,成绩)
主键:学号+课程号
主属性:{学号,课程号}
非主属性有:{姓名、性别、年龄、系别、专业,成绩}
部分函数依赖
姓名、性别、年龄、系别、专业属性与课程号无关:
如
:
(
学
号
,
课
程
号
)
−
−
−
−
>
姓
名
是
“
部
分
函
数
依
赖
”
\color{blue}{如:(学号,课程号)---->姓名是“部分函数依赖”}
如:(学号,课程号)−−−−>姓名是“部分函数依赖”
完全函数依赖
成绩依赖于学号和课程号
(
学
号
,
课
程
号
)
−
−
−
−
>
成
绩
是
“
完
全
函
数
依
赖
”
\color{blue}{(学号,课程号)---->成绩 是“完全函数依赖”}
(学号,课程号)−−−−>成绩是“完全函数依赖”
传递函数依赖
学生成绩信息表(学号、姓名、性别、年龄、系别、专业、课程号,成绩,系主任)
系主任依赖于系别,与学号无关,与课程号也无关。又因系别依赖于学号,系主任间接依赖于学号
(
学
号
,
课
程
号
)
−
−
−
−
−
>
系
主
任
是
“
传
递
函
数
依
赖
”
\color{blue}{(学号,课程号)----->系主任是“传递函数依赖”}
(学号,课程号)−−−−−>系主任是“传递函数依赖”