數據庫系統概論(二)數據庫設計--視圖、模式


數據庫設計的六個階段

  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內部有優化),所以使用視圖時有一個必須要注意的,就是不要嵌套使用查詢。尤其是復雜查詢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM