1. 程式人生 > >資料庫系統概念中table/view/schema/index的關係

資料庫系統概念中table/view/schema/index的關係

操作物件 建立 刪除 修改
模式 CREATE SCHEMA DROP SCHEMA
CREATE TABLE DROP TABLE ALTER TABLE
視 圖 CREATE VIEW DROP VIEW
索 引 CREATE INDEX DROP INDEX

大家不一定要了解這個東西的準確定義是什麼,但是一定要知道它是資料庫的基礎。

沒有資料表,關鍵字、主鍵、索引等也就無從談起。在資料庫畫板中可以顯示資料庫中的所有資料表,建立資料表,修改表的定義等。

資料表是資料庫中一個非常重要的物件,是其他物件的基礎。

模式

在MySQL中建立一個schema好像就跟建立一個database是一樣的效果,在SQL Server和Orcal資料庫中好像又不一樣。所以我們要理解一下schema和table的關係。

schema和user的關係

在sql server2000中,使用者和架構是不分離的,關係如下表:

這裡寫圖片描述

直到了2005才分離。
這裡寫圖片描述

通過這張表,我們可以看出,使用者1可以訪問架構1和架構3,使用者2可以訪問架構1和架構2,以此類推。

user對於不同的schema有不同的權利。

schema、database以及table的關係

我們可以可以把database看作是一個大倉庫,倉庫分了很多很多的房間,schema就是其中的房間,一個schema代表一個房間,table可以看作是每個schema中的床,table(床)就被放入每個房間中,不能放置在房間之外。

然後床上可以放置很多物品,就好比table上可以放置很多列和行一樣。資料庫中儲存資料的基本單元是table,現實中每個倉庫放置物品的基本單位就是床。

User是對應與資料庫的(即User是每個對應資料庫的主人),既然有操作資料庫(倉庫)的權利,就肯定有操作資料庫中每個schema(房間)的權利,就是說每個資料庫對映的user有每個schema(房間)的鑰匙

還可以給user分配具體的許可權,也就是他到某一個房間能做些什麼,是隻能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個user所對應的角色Role了。

總結來說,我們的資料庫就是一個數據的大倉庫,而裡面建立了很多很多模式,分別放著不同的資料庫物件(包括表),而不同的模式有不同的許可權,於是,不同的使用者就有不同的訪問許可權來訪問某個模式裡的資料庫物件。

索引

1.資料庫引入了索引
使用者對資料庫最頻繁的操作是進行資料查詢。一般情況下,資料庫在進行查詢操作時需要對整個表進行資料搜尋。當表中的資料很多時,搜尋資料就需要很長的時間,這就造成了伺服器的資源浪費。為了提高檢索資料的能力,資料庫引入了索引機制。

2.有關“索引”的比喻
從某種程度上,可以把資料庫看作一本書,把索引看作書的目錄,通過目錄查詢書中的資訊,顯然較沒有目錄的書方便、快捷。

3.資料庫索引實際是什麼?(兩部分組成)
索引是一個單獨的、物理的資料庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。

4.索引在表中的角色
一個表的儲存是由兩部分組成的,一部分用來存放表的資料頁面,另一部分存放索引頁面。索引就存放在索引頁面上。

5.索引高效原理
通常,索引頁面相對於資料頁面來說小得多。當進行資料檢索時,系統先搜尋索引頁面,從中找到所需資料的指標,再直接通過指標從資料頁面中讀取資料。

檢視

目前所說的概念,都是在邏輯層上進行的操作,而有的時候,我們需要做出來一個虛擬的表給使用者看,除安全性考慮(檢視是隻讀的)之外,更加考慮到使用者的直覺問題(讓他看到更合理的資料)。

檢視(view)是從一個或幾個基本表中根據使用者需要而做成一個虛表。

1:檢視是虛表,它在儲存時只儲存檢視的定義,而沒有儲存對應的資料。
2:檢視只在剛剛開啟的一瞬間,通過定義從基表中搜集資料,並展現給使用者。

檢視與查詢的區別:

檢視和查詢都是用由sql語句組成,這是他們相同的地方,但是檢視和查詢有著本質區別:

它們的區別在於:

1:儲存上的區別:檢視儲存為資料庫設計的一部分,而查詢則不是.
2:更新限制的要求不一樣

要注意:因為檢視來自於表,所以通過檢視可以間接對錶進行更新,我們也可以通過update語句對錶進行更新,但是對檢視和查詢更新限制是不同的,以下我們會知道雖然通過檢視可以間接更新表但是有很多限制.

3:排序結果:通過sql語句,可以對一個表進行排序,而檢視則不行。比如:建立一個含有order by子句的檢視,看一下可以成功嗎?

view和table的關係

view和table的關係就像是cache和記憶體的關係。

記憶體中的資料修改之後,會對應修改cache的資料,但是不允許直接修改cache中的資料。

  1. 檢視的更新通常是在顯示的時刻(這非常像寫時複製技術)
  2. 檢視是隻讀的(因為通過檢視更新是非常混亂的事情,如上文紅字)
  3. 檢視有可能被資料庫快取,所以對於查詢量高的查詢。

檢視是可以被展開的,也就是說,可以用檢視來定義檢視(這個功能很cool吧),但是不可以遞迴定義。

檢視的優點:

  為什麼有了表還要引入檢視呢?這是因為檢視具有以下幾個優點:

  1. 能分割資料,簡化觀點。可以通過select和where來定義檢視,從而可以分割資料基表中某些對於使用者不關心的資料,使使用者把注意力集中到所關心的資料列.進一步簡化瀏覽資料工作
  2. 為資料提供一定的邏輯獨立性。 如果為某一個基表定義一個檢視,即使以後基本表的內容的發生改變了也不會影響“檢視定義”所得到的資料
  3. 提供自動的安全保護功能。 檢視能像基本表一樣授予或撤消訪問許可權
  4. 檢視可以間接對錶進行更新,因此檢視的更新就是表的更新