DBA和三范式
将数据库中的数据导出:
在Windows的dos命令窗口中执行(不用登陆):
mysqldump bjpowernode>D:\bjpowernode.sql -uroot -p1234
导出指定表:
mysqldump bjpowernode emp>D:\bjpowernode.sql -uroot -p1234
导入数据库:
必须先创建数据库,并且打开数据库,才能导入数据库.
create database bjpowernode;
use bjpowernode;
source 脚本路径;
数据库设计三范式:
什么是设计范式:
设计表的依据,按照这个三范式设计的表不会出现数据的冗余.
三范式的内容:
1. 任何一张表都应该有一个主键,并且每一个字段原子性不可再分.(比如:联系方式字段中包含了邮箱和手机号,其实可以再分开)
2. 所有非主键字段,完全依赖于主键,不能产生部分依赖.(符合主键,有可能出现部分依赖(非主键字段可能只依赖于主键的某一个字段,而与其他字段无关),单一主键不可能出现部分依赖.)
多对多该怎么处理? 分成三张表:关系表两个外键.
t_student学生表
sno(pk) sname
-------------------
1 张三
2 李四
3 王五
t_teacher 讲师表
tno(pk) tname
------------------
1 王老师
2 张老师
3 李老师
t_student_teacher_relation 学生讲师关系表
id(pk) sno(fk) tno(fk)
----------------------------------
1 1 3
2 1 1
3 2 2
4 2 3
5 3 1
6 3 3
3.建立在第二范式的基础之上,所有非主键字段,不能产生传递依赖.
一对多, 如何处理? 分成两张表,多的表加外键.
班级t_class
cno(pk) cname
------------------
1 a
2 b
3 c
4 d
学生t_student
sno(pk) sname classno(fk)
-------------------------------------
101 zs 1
102 ls 1
103 ww 2
104 hh 2
105 sd 3
注意:在实际开发中,已满足客户的需求为主,有的时候会拿冗余换执行速度.
表的设计经典方案:
一对一怎么设计?
像用户的信息,有时专门留一张表存储用户名和密码用来登录使用.再建另一张表来存储用户的详细信息(比如家庭住址)
两种方案:
1.主键共享
t_user_login 用户登录表
id(pk) username pwd
-----------------------------
1 zs 123
2 ls 456
t_user_detail 用户详细信息表
id(pk+fk) realname tel
-----------------------------
1 张三 110
2 李四 120
1.外键唯一
t_user_login 用户登录表
id(pk) username pwd
-----------------------------
1 zs 123
2 ls 456
t_user_detail 用户详细信息表
id(pk+fk) realname tel userid(fk + unique)
----------------------------------------------------------------
1 张三 110 1
2 李四 120 2