資料庫系統概念中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中的數據。
視圖的更新通常是在顯示的時刻(這非常像寫時複製技術)
視圖是只讀的(因為通過視圖更新是非常混亂的事情,如上文紅字)
視圖有可能被資料庫緩存,所以對於查詢量高的查詢。
視圖是可以被展開的,也就是說,可以用視圖來定義視圖(這個功能很cool吧),但是不可以遞歸定義。
視圖的優點:
為什麼有了表還要引入視圖呢?這是因為視圖具有以下幾個優點:
能分割數據,簡化觀點。可以通過select和where來定義視圖,從而可以分割數據基表中某些對於用戶不關心的數據,使用戶把注意力集中到所關心的數據列.進一步簡化瀏覽數據工作
為數據提供一定的邏輯獨立性。 如果為某一個基表定義一個視圖,即使以後基本表的內容的發生改變了也不會影響「視圖定義」所得到的數據
提供自動的安全保護功能。 視圖能像基本表一樣授予或撤消訪問許可權
視圖可以間接對錶進行更新,因此視圖的更新就是表的更新
打開今日頭條,查看更多精彩圖片※find命令與Linux文件擴展名
※Hessian2ObjectInput.readObject : hessian 反序列化空指針異常
TAG:程序員小新人學習 |