模式與資料庫 資料庫中的表的關係

2021-06-22 20:47:01 字數 2436 閱讀 2007

模式與資料庫、資料庫中的表的關係

1個資料庫下,可以有多個模式。

1個模式下,可以有0個或多個表 。

首先我來做乙個比喻,什麼是user,什麼是database,什麼是schema,什麼是table,什麼是列,什麼是行,?

我們可以把database看作是乙個大倉庫,倉庫分了很多很多的房間,schema就是其中的房間,乙個schema代表乙個房間,table可以看作是每個schema中的床,table就被放入每個房間中,不能放置在房間之外。然後床上可以放置很多物品,就好比table上可以放置很多列和行一樣。所以schema包含的是object,而不是user。

user是每個對應資料庫的主人,既然有運算元據庫的權利,就肯定有運算元據庫中每個schema(房間)的權利。換句話說,如果他是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的所有東西都是他的,他有完全的操作權,。我們還可以給user分配具體的許可權,也就是他到某乙個房間能做些什麼,是只能看(read-only),還是可以像主人一樣有所有的控制權(r/w),這個就要看這個user所對應的角色role了,至於分配許可權的問題,後面章節有介紹。

在sql server2005中,當我們用create user建立資料庫使用者時,我們可以為該使用者指定乙個已經存在的schema作為預設schema,如果我們不指定,則該使用者所預設的schema即為dbo 模式,dbo 房間(schema)好比乙個大的公共房間,在當前登入使用者沒有預設schema的前提下,如果你在大倉庫中進行一些操作,比如create tabe,如果沒有指定特定的房間(schema),那麼你的物品就只好放進公共的dbo房間(schema)了。但是如果當前登入使用者有預設的schema,那麼所做的一切操作都是在預設schema上進行(比如當前登入使用者為login1。

在sql server2005中建立乙個資料庫的時候,會有一些schema包括進去,被包括進去的schema有:dbo,information_schema,guest,sys等等。

我在上文中已經提到了,在sql server2005中當用儲存過程sp_adduser建立乙個user時,同時sql server2005也為我們建立了乙個預設的和使用者名稱相同的schema,這個時候問題出來了,當我們create table a時,如果沒有特定的schema做字首,這個a表建立在了哪個schema上,即進入了哪個房間?答案是:

1.如果當前運算元據庫的使用者有預設的schema(在建立使用者的時候指定了),那麼表a被建立在了預設的schema上。

2.如果當前運算元據庫的使用者沒有預設的schema(即在建立user的時候預設為空),那麼表a被建立在了dbo schema上,即使有乙個和使用者名稱同名的schema存在,由於它不是該使用者預設的schema,所以建立表的時候是不會考慮的,當作一般的schema來處理,別看名字相同,可是沒有任何關係哦。

3.如果在建立表a的時候指定了特定的schema做字首,則表a被建立在了指定的 schema上。

在這裡,為了避免混淆和提高運算元據庫的速度,我們最好每次在運算元據庫物件的時候都顯式地指定特定的schema最為字首。現在如果登入的使用者為sue,該使用者有乙個預設schema也為sue,那麼如果現在有一條查詢語句為select * from mytable, 那麼搜尋每個房間(schema)的順序是怎樣的呢?順序如下:

1. 首先搜尋sys.mytable (sysschema)

2. 然後搜尋sue.mytable (default schema)

3. 最後搜尋 dbo.mytable (dbo schema)

執行的順序大家既然清楚了,那麼以後在查詢資料庫表中的資料時,最好指定特定的schema字首,這樣子,資料庫就不用去掃瞄sys schema了,當然可以提高查詢的速度了。

另外需要提示一下的是,每個資料庫在建立後,有4個schema是必須的(刪都刪不掉),這4個schema為:dbo,guest,sys和information_schema,其餘的schema都可以刪除。

為什麼把錶歸屬於不同的模式裡?

例如你的資料庫裡面有很多的表。就以乙個學校作為例子吧:

有很多表分別用於儲存學生、課程、成績、學分等資訊。

還有很多表用於儲存 老師、工資、獎金等資訊。

還有很多表用於儲存學校的固定資產、流動資產、財務相關資訊。

如果這麼多的表,都混雜在一起。管理起來非常麻煩。

通過create schema , 劃分區域,

把學生的,建立乙個 schema  叫 student

教師的,建立乙個 schema   叫 teacher

學校財務的,建立乙個 schema  叫 school

這樣,對於專門負責學生資訊管理的,就只負責 student 這個 schema,表名全部是 student.具體表名。

對於,負責教師系統開發的人來說,程式裡面的表名,都是teacher.具體表名。

學校財務的也是一樣,查詢的時候,是:select  * from  school.具體表名;

模式與資料庫 資料庫中的表的關係

模式與資料庫 資料庫中的表的關係 1個資料庫下,可以有多個模式。1個模式下,可以有0個或多個表 首先我來做乙個比喻,什麼是user,什麼是database,什麼是schema,什麼是table,什麼是列,什麼是行,我們可以把database看作是乙個大倉庫,倉庫分了很多很多的房間,schema就是其...

mysql資料庫表關係 資料庫 表關係

上節回顧 1.建表語法 注意點 2.資料型別 今日內容 1.表之間的關係 多對一,多對多,一對一 2.複製表 分表 為什麼要分表?乙個表中 要儲存個人資訊又要儲存部門資訊 會導致大量的資料冗餘 所有資料存放在同乙個表中 將導致以下幾個問題 1.浪費空間 不致命 2.結構混亂 3.修改資料時 如果有一...

關聯式資料庫 定義資料庫表之間的關係

關係型別 你和家人有很多關係。例如,你和你母親是親戚。你只有乙個母親,但她可能有幾個孩子。你和你的兄弟姐妹是親戚 你可能有很多兄弟姐妹,當然,他們也會有很多兄弟姐妹。如果你結婚了,你和你的配偶都有配偶 彼此 但一次只有乙個。資料庫關係非常相似,因為它們是表之間的關聯。關係有三種型別 建立關係 當您開...