**#数据库设计**
多表设计
**1.多表之间的关系**
一对一:身份证
一对多:部门员工
多对多:学生和课程
一对多就是部门和员工,很显然员工表建立一个外键到部门表
多对多比如学生和课程,就需要中间表联动,中间表就是多行相同的学生id对应不同的课程id
中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键.
一对一给外键加唯一约束一般就是一张表就不拆成两张表
**2.数据库设计的范式**
关于遵循不同的规范要求设计出合理的关系型数据库,不同的规范要求被称为范式.越高的范式数据库数据冗余越小
第一范式,第二范式,第三范式,巴斯-科德范式,第四范式,第五范式又称为(完美范式)
各种范式呈递次规范,越严格
**第一范式**
不可分割的原子数据项. //越往后递增越要遵循前几个范式的规则
//比如学院系,系主任,学生,没招生多了系不能添加数据,或者同学毕业了,系也跟着删除了,都是严重问题.
**第二范式**解决了冗余的问题
几个概念:
1.函数依赖
如果能通过A的属性值确定B,A-->B,则成为B依赖于A,比如学号确定学生.则学生依赖于学号,学号和课程能推算出分数.
学号推姓名
2.完全函数依赖
学号课程推成绩
3.部分函数依赖
学号-课程推姓名
4.传递函数依赖
A->B B->C
C传递依赖于A
学号->系名 系名->系主任
5.码(就是能通过这个列或者多个列来确定其他列的值就叫码)
一个属性或属性组被其他所有属性完全依赖,就是码
主属性:码属性组中的所有属性
非主属性:剩下所有的都是非主
**第三范式**
防止传递依赖导致,删除一个会接着删除别的.
学号课程成绩.学号姓名系.系系主任
**数据库的备份和还原**
备份:mysqldump -u用户名 -p密码 数据库名 > 保存路径
还原:登录数据库,创建数据库,使用数据库.执行文件->source 文件路径