视图view
使用
- 创建视图对象
语法:create view 视图名 as select 视图内容; - 删除视图
语法:drop view 视图名; - 注意
只有DQL语句才能以view的形式创建
但是view创建完成之后可以进行增删改查(CRUD)等操作
作用
- 面向视图对象进行操作,可以简化SQL语句
对视图对象的增删改查(CRUD)会导致原表被操作(可以理解为一种引用)
将一条复杂且需要在多个位置反复使用的SQL语句以视图对象的形式新建,简化书写过程且利于后期维护
数据库设计范式
范式一
要求任何一张表必须设置
主键
,每一个字段原子性
不可再分
范式二
在范式一的基础上,要求所有非主键字段
完全依赖
主键,不要产生部分依赖
这张表描述了学生和老师的多对多关系
学生编号 教师编号 学生姓名 教师姓名
----------------------------------------------------
1001 001 张三 王老师
1002 002 李四 赵老师
1003 001 王五 王老师
1001 002 张三 赵老师
1.修改使其满足满足第一范式
方法:学生编号 教师编号,两个字段联合做主键,复合主键
缺点:“张三”依赖1001,“王老师”依赖001,显然==产生了部分依赖==(导致数据重复而冗余,空间浪费)。不满足第二范式
2.修改使其满足满足第二范式
方法:使用三张表来表示多对多的关系
学生表(学生编号做主键)
学生编号 学生名字
------------------------------------
1001 张三
1002 李四
1003 王五
教师表(教师编号做主键)
教师编号 教师姓名
--------------------------------------
001 王老师
002 赵老师
学生教师关系表(id做主键)
id 学生编号 教师编号
------------------------------------------------------
1 1001 001
2 1002 002
3 1003 001
4 1001 002
技巧:多对多,三张表,关系表添加两个外键
范式三
在范式二的基础上,要求所有非主键字段
直接依赖
主键,不要产生传递依赖
这张表描述了班级和学生的1对多关系
学生编号 学生姓名 班级编号 班级名称
---------------------------------------------------------
1001 张三 01 一年一班
1002 李四 02 一年二班
1003 王五 03 一年三班
1004 赵六 03 一年三班
1.满足第一范式和第二范式
但是一年一班依赖01,01依赖1001,==产生了传递依赖==。
不符合第三范式的要求。产生了数据的冗余。
2.修改使其满足满足第三范式
班级表:一
班级编号 班级名称
----------------------------------------
01 一年一班
02 一年二班
03 一年三班
学生表:多
学生编号 学生姓名 班级编号
-------------------------------------------
1001 张三 01
1002 李四 02
1003 王五 03
1004 赵六 03
技巧:一对多的表,多的表加外键