2021-03-26范式,视图

范式

  1. 1NF

    确保每列的原子性(不可再分)

  2. 2NF

    (1)宏观:

    每一张表表达一件事 stu表 stuno name sex class tid tadg ttel

    A B 依赖 决定

    (2)微观:

    除了主键以外的其他字段,都要依赖于主键

  3. 3NF

    微观:除了主键以外的其他字段,都要依赖于主键 ,不要有传递

    在这里插入图片描述

    注意:第三范式 可以帮助规范数据库设计

    好处:防止混乱、数据冗余

    缺点:有些表难以拆分 SQL语句复杂 多表查询性能复杂

    一般多使用第二范式

数据库表设计软件

  1. PowerDesigner

  2. https://www.fujieace.com/software/powerdesigner.html

  3. 创建模型在这里插入图片描述

  4. 创建数据库表在这里插入图片描述

  5. 设计数据库表
    在这里插入图片描述

  6. 创建两张表

    在这里插入图片描述

  7. 设计外键

    在这里插入图片描述

  8. 保存

    (1)保存PDM: Ctrl+S

    在这里插入图片描述

    (2)保存SQL语句:Ctrl+G

    在这里插入图片描述

视图的概念

  1. 属于数据库对象之一,视图是一个逻辑表,它允许操作者从其它表或视图存取数据,视图本身不包含数据

  2. 视图 = 临时表

  3. 使用视图有以下优点:

    • 提供附加的表安全级,限制存取基表的行或/和列集合。

    • 隐藏数据复杂性。

    • 简化用户数据查询和处理操作。

    • 有利于数据交换操作。

创建视图

  1. create view 视图名 as sql语句

    create view mysyxview

    as

    select d.deptno 部门编号, e.empno,e.ename,sal,comm,d.dname from emp e,dept d where e.deptno=d.deptnyujvo and d.deptno=20 ;

  2. 优点:

    (1)简化查询语句

    select * from mysyxview ;

    (2)增加了安全性,提供或组合一个可以分享给其他开发人员使用,避免安全信息遗漏

删除视图

  1. drop view 视图名 ;

视图授权

  1. 授予:通过sys 授予scott 创建视图权限

    grant create view to 用户名 ;

  2. 撤销:
    在这里插入图片描述

    revoke create view from 用户名 ;

  3. 注意:如果在创建视图时,给某个字段起别名了,那么在视图中就只能识别别名而不识别原来的字段名了!!

    在这里插入图片描述

  4. update myempview2 set ename=‘ls’ where empno=8002 ;

    在这里插入图片描述

    应该改为: update myempview2 set ename=‘ls’ where 员工编号=8002 ;

修改视图

  1. update 视图名 SQL语句;

  2. update mysyxvie set ename=‘ls’ where empno =8002 ;

  3. 修改视图的时候(DML),会影响原表数据,因此一般不建议修改视图

    只作为查询使用(DQL)!

    在这里插入图片描述

    修改视图的时候对应的原表也被修改了:

    在这里插入图片描述

  4. 如果update操作涉及多表操作,则容易出现的异常,比如关键列!再次建议对视图只做查询,不做DML!!

    在这里插入图片描述

    视图:

    在这里插入图片描述

  5. (1)删除原有视图

    Drop view myempview;

    (2)重新创建视图

    create view myempview2

    as

    select empno,ename,deptno from emp where deptno=20 ;

    (3)此时在修改deptno=40 修改成功!

    update myempview2 set deptno=40 where empno=8003 ;

    但是此方法不太合理!!!!

  6. 建议加限制条件:

    (1)设置限制:with check option ;

    a.删除原有视图

    Drop view myempview;

    b.重新创建视图with check option

    create view myempview2

    as

    select empno,ename,deptno from emp where deptno=20 with check option ;

    c.此时在修改deptno=40 报错(子句违规)

    update myempview2 set deptno=40 where empno=8002 ;

    在这里插入图片描述

    (2)设置只读:with read only ;(只能查询)

    a.删除原有视图

    b.重新创建视图 添加只读限制(with read only)

    create view myempview2

    as

    select empno,ename,deptno from emp where deptno=20 with read only ;

    c.此时增删改均会报错

    在这里插入图片描述

使用视图的限制

  1. 当更新视图中的数据时,实际上是对表的内部数据进行更新。事实上, 当从视图中插入或者删除时,情况也是这样。

    然而,某些视图是不能更新数据的,这些视图有如下的特征:

    •有INTERSECT,UNION和MINUX等集合操作符的视图。

    •有GROUP BY,CONNECT BY或者START WITH子句的视图。

    •有诸如AVG,SUM或者MAX等组函数的视图。

    •使用DISTINCT函数的视图。

    •连接表的视图(其中有一些例外)。

案例

  1. 创建一个部门编号为20的所有员工信息的临时表

    select d.deptno 部门编号, e.empno, e.ename, sal,comm, d.dname from emp e, dept d where e.deptno=d.deptno and d.deptno=20;

    在这里插入图片描述

  2. 使用视图

    (1)创建视图create view 视图名 as SQL语句

    create view myempview2 as select d.deptno 部门编号, e.empno 员工编号, e.ename, sal,comm, d.dname from emp e, dept d where e.deptno=d.deptno and d.deptno=20;

  3. 操作视图 DML和操作表一样!

了解

  1. 在这里插入图片描述

  2. 视图只查看,最好不要DML!!!!

Guess you like

Origin blog.csdn.net/qq_52332852/article/details/115234760