資料庫中Schema(模式)概念的理解

2022-08-08 23:21:14 字數 1392 閱讀 8019

在學習sql的過程中,會遇到乙個讓你迷糊的schema的概念。

實際上,schema就是資料庫物件的集合,這個集合包含了各種物件如:表、檢視、儲存過程、索引等。為了區分不同的集合,就需要給不同的集合起不同的名字,預設情況下乙個使用者對應乙個集合,使用者的schema名等於使用者名稱,並作為該使用者預設schema。所以schema集合看上去像使用者名稱。

如果把database看作是乙個倉庫,倉庫很多房間(schema),乙個schema代表乙個房間,table可以看作是每個房間中的儲物櫃,user是每個schema的主人,有運算元據庫中每個房間的權利,就是說每個資料庫對映的user有每個schema(房間)的鑰匙。

我們訪問乙個表時,沒有指明該錶屬於哪乙個schema中的,系統就會自動給我們在表上加上預設的sheman名。在資料庫中乙個物件的完整名稱為schema.object,而不屬user.object。

在mysql中建立乙個schema和建立乙個database的效果好像是一樣的,但是在 sqlserver 和 oracle 資料庫中效果又是不同的。

在sql server 2000中,user和schema總有一層隱含的關係,讓我們很少意識到其實user和schema是兩種完全不同的概念,假如我們在某一資料庫中建立了使用者bosco,那麼此時後台也為我們預設的建立了schema【bosco】,schema的名字和user的名字相同。

在sql server 2005中,為了向後相容,當用sp_adduser儲存過程建立乙個使用者的時候,sqlserver2005同時也建立了乙個和使用者名稱相同的schema,然而這個儲存過程是為了向後相容才保留的,當我們用create user建立資料庫使用者時,我們可以用該使用者指定乙個已經存在的schema作為預設的schema,如果我們不指定,則該使用者所預設的schema即為dbo schema,dbo房間(schema)好比乙個大的公共房間,在當前登入使用者沒有預設schema的前提下,如果你在大倉庫中進行一些操作,比如create table,如果沒有制定特定的房間(schema),那麼你的物品就只好放進公共的dbo房間(schema)了。但是如果當前登入使用者有預設的schema,那麼所做的一切操作都是在預設的schema上進行。

在oracle資料庫中不能新建乙個schema,要想建立乙個schema,只能通過建立乙個使用者的方法解決,在建立乙個使用者的同時為這個使用者建立乙個與使用者名稱同名的schem並作為該使用者的預設shcema。即schema的個數同user的個數相同,而且schema名字同user名字一一 對應並且相同。

postgresql中模式的概念與mysql中database的概念是等同的。在mysql中可以同事訪問多個database物件,但在postgresql中只能訪問乙個database物件,但在postgresql中可以訪問多個scheme。

摘自原文  

共同學習,共同進步,若有補充,歡迎指出,謝謝!

資料庫中Schema(模式)概念的理解

在學習sql的過程中,會遇到乙個讓你迷糊的schema的概念。實際上,schema就是資料庫物件的集合,這個集合包含了各種物件如 表 檢視 儲存過程 索引等。為了區分不同的集合,就需要給不同的集合起不同的名字,預設情況下乙個使用者對應乙個集合,使用者的schema名等於使用者名稱,並作為該使用者預設...

資料庫中Schema(模式)概念的理解

摘自 在學習sql的過程中,會遇到乙個讓你迷糊的schema的概念。實際上,schema就是資料庫物件的集合,這個集合包含了各種物件如 表 檢視 儲存過程 索引等。為了區分不同的集合,就需要給不同的集合起不同的名字,預設情況下乙個使用者對應乙個集合,使用者的schema名等於使用者名稱,並作為該使用...

資料庫中Schema(模式)概念的理解

在學習sql的過程中,會遇到乙個讓你迷糊的schema的概念。實際上,schema就是資料庫物件的集合,這個集合包含了各種物件如 表 檢視 儲存過程 索引等。為了區分不同的集合,就需要給不同的集合起不同的名字,預設情況下乙個使用者對應乙個集合,使用者的schema名等於使用者名稱,並作為該使用者預設...