- 多表之间的关系
- 分类:
1.一对一
* 如:人和身份证- 分析:一个人只有一个身份证,一个身份证只能对应一个人
2.一对多
如:部门和员工- 分析:一个部门有多个员工,一个员工只能对应一个部门
3.多对多 - 如:学生和课程
- 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择
- 分析:一个部门有多个员工,一个员工只能对应一个部门
- 分析:一个人只有一个身份证,一个身份证只能对应一个人
- 实现关系:
- 一对多(多对一):
实现方式:在多的一方建立外键,指向一的一方的主键
2. 多对多:
实现方式:需要借助第三张中间表,中间表必须包含两个字段,这两个字段作为第三张表的外键,指向另外两张表的主键
3. 一对一(了解):- 如:人和身份证
- 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。
- 一对多(多对一):
数据库的三大范式
-
概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 -
分类:
- 第一范式(1NF):每一列都是不可分割的原子数据项
- 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)
- 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
- 几个概念:
1.函数依赖:A-->B: A是一个属性,如果A属性的值可以确定唯一的B属性,则称B依赖于A
例如:学号-->姓名
2.完全函数依赖:A-->B:A是一个属性组,如果B属性的值需要A属性组中所有属性才能确定,则称B属性完全依赖于A
例如:学号,课程名称-->分数
3. 部分函数依赖:A-->B,A是一个属性组,如果B属性的值确定只需要A属性中某一个值,则称B部分依赖于A
例如:学号,课程名称-->姓名
4. 传递函数依赖:A-->B, B -- >C ,A如果是一个属性或者属性组,如果通过A属性可以确定唯一的B属性,在通过B属性可以确定唯一的C属性,则称C属性传递依赖于A属性
例如:学号-->系-->系主任
5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
* 候选码:关系中存在多个属性或属性组都能唯一标识该关系的元组(一行数据),这些属性或属性组就成为该关系的候选键或候选码.- 主码:在一个关系的若干候选码中指定一个用来标识该关系的元组,这个被指定的候选码称为主关键字,称为主键或主码. 每个关系都有且只有一个主键,通常用较小的属性组作为主键.
- 主属性:包含在任何一个候选码中的属性称为主属性
- 非主属性:不包含在任何一个候选码中的属性称为非主属性