数据库系统概论(二)数据库设计--视图、模式

数据库设计的六个阶段

  1.需求分析:分析用户需求,包括数据、功能和性能要求----建立数据字典

  2.概念结构设计:主要采用E-R图进行设计,包括画E-R图-----产生概念模式(概念模式在很多说法中也就是逻辑模式)

    1、2是与DBMS独立的设计阶段

  3.逻辑结构设计:将E-R图转化为表,实现E-R概念模型到关系(数据)模型的转变-----产生逻辑模式/模式,并且在基本表的基础上建立视图(view),形成数据的外模式

  4.物理结构设计:选择合适的存储结构和存取路径(建立索引)----形成数据库内模式

    3、4与选用哪种DBMS密切相关

  5.数据库实施:编程、测试、试运行

  6.运行和维护:系统运行和数据库维护、评估调整

数据库三级模式+两级映像

  

  1.模式(Schema)

    模式也称为逻辑模式,是数据库中全体数据在逻辑上的图。通常以某种数据模型为基础,定义数据库中全部数据的逻辑结构如:数据记录的名称,数据项的名称,类型,值域等。 

    模式使开发者可以看见和使用全部的数据的逻辑结构和特征描述

注意:

模式不是数据本身,仅描述数据库的结构。不涉及硬件环境和物理存储细节,也不与任何计算机语言有关。

数据库管理系统提供模式描述语言(模式DDL)来定义模式。

模式DDL给出一个数据库逻辑定义的全部语言便构成了该数据库的模式

  2.外模式(External Schema)

    外模式面向具体的应用程序

    外模式也称子模式(Sub Schema)或者用户模式,是个别用户组的数据库视图。每个外模式描述的是一个特定用户感兴趣的数据部分,隐藏了数据库其他部分

    外模式可以使用户看见和使用局部数据的逻辑结构和特征的描述

注意:
外模式是模式的子集,不同用户的外模式是不同的(可互相覆盖)。

一个程序只能启用一个外模式,但一个外模式可被多个应用程序使用,每个应用程序只能调用它的外模式所涉及的数据,其余的数据它是无法访问的。

数据库管理系统提供外模式描述语言(Sub-DDL)来描述外模式。Sub-DDL给出的用以定义一个用户数据视图的全部语句称为此用户的外模式。

  3.内模式(Internal Schema)

    内模式也称存储模式(Storage Schema)。即数据库全体数据的物理结构、存储方法、存取策略(路径,包括索引)。内模式与数据存储的软件和硬件环境是有关的。

注意:

数据库管理系统提供内模式描述语言(内模式DDL)来描述和定义内模式。

对于一个数据库来说只有一个模式和一个内模式,但可以有多个外模式。实际的数据库与内模式对应,应用程序则与外模式有关。

模式/内模式映像是唯一的,但有多个外模式/模式映像,每一个外模式都有一个外模式/模式映像(包含在该外模式定义中)。

  两级映像

    数据的独立性是指数据与程序独立,将数据的定义从程序中分离出来,由DBMS(数据库管理系统)负责数据的存储,从而简化应用程序,大大减少应用程序编制的工作量

    两级映像保证了数据的独立性,数据独立性分为物理独立性和逻辑独立性

   1.外模式/模式映像---保证逻辑独立性

      当数据库(逻辑)模式发生改变时,应用程序(外模式)不需改变。通过修改外模式/模式映像实现

   2.模式/内模式映像---保证物理独立性

      当数据库内模式发生改变时,逻辑模式不用改变,进而保证应用程序(外模式)不需改变。通过修改外模式/内模式映像实现

视图

  视图是一个虚拟表,其查询的数据来自于视图定义时的 as select xx 查询语句。视图的列来自于一个表或多个表,所以视图不可以和表名重名
  数据多用作查询,一般不会通过视图去修改数据

关系型数据库执行CREAT VIEW的时候,只是把视图定义存入数据字典,并不执行其中的SELECT

视图的作用

  1.视图能简化用户的操作

    我们可以为常用的sql语句创建一个视图,这样我们原来需要连多个表,现在操作一个表就好了。

    当一个查询你需要频频的作为子查询使用时,视图可以简化代码,直接调用而不是每次都去重复写这个东西。

  2.视图能够增加安全性
    我们可以给不同的用户定义不同的视图,屏蔽了底层的表结构,从而更好的保护了数据的安全性。降低了如sql注入的风险。

3视图对重构数据库提供了一定程度的逻辑独立性
  数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。

【实例 】在 tb_students_info 表上创建一个名为 v_students_info 的视图,输入的 SQL 语句和执行结果如下所示。

mysql> CREATE VIEW v_students_info
    -> (s_id,s_name,d_id,s_age,s_sex,s_height,s_date)
    -> AS SELECT id,name,dept_id,age,sex,height,login_date
    -> FROM tb_students_info;
Query OK, 0 rows affected (0.06 sec)
mysql> SELECT * FROM v_students_info;
+------+--------+------+-------+-------+----------+------------+
| s_id | s_name | d_id | s_age | s_sex | s_height | s_date     |
+------+--------+------+-------+-------+----------+------------+
|    1 | Dany   |    1 |    24 | F     |      160 | 2015-09-10 |
|    2 | Green  |    3 |    23 | F     |      158 | 2016-10-22 |
|    3 | Henry  |    2 |    23 | M     |      185 | 2015-05-31 |
|    4 | Jane   |    1 |    22 | F     |      162 | 2016-12-20 |
|    5 | Jim    |    1 |    24 | M     |      175 | 2016-01-15 |
|    6 | John   |    2 |    21 | M     |      172 | 2015-11-11 |
|    7 | Lily   |    6 |    22 | F     |      165 | 2016-02-26 |
|    8 | Susan  |    4 |    23 | F     |      170 | 2015-10-01 |
|    9 | Thomas |    3 |    22 | M     |      178 | 2016-06-07 |
|   10 | Tom    |    4 |    23 | M     |      165 | 2016-08-05 |
+------+--------+------+-------+-------+----------+------------+
10 rows in set (0.01 sec)

可以看到,view_students_info 和 v_students_info 两个视图中的字段名称不同,但是数据却相同。因此,在使用视图时,可能用户不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

视图和表的区别与联系

区别:
      1、视图是已经编译好的sql语句,而表不是。
      2、视图没有实际的物理记录,而表有。
      3、表是内容,视图是窗口。
      4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改。
      5、表是内模式,试图是外模式。
      6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
      7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。 
      8、视图的建立和删除只影响视图本身,不影响对应的基本表。
      9、不能对视图进行update或者insert into操作。
联系:
    视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
总结:
 视图是一个子查询,性能肯定会比直接查询要低(尽管sql内部有优化),所以使用视图时有一个必须要注意的,就是不要嵌套使用查询。尤其是复杂查询。

posted @ 2020-03-07 16:07  幽灵化石  阅读(3247)  评论(0编辑  收藏  举报