數據庫中Schema(模式)概念的理解

在學習SQL的過程中,會遇到一個讓你迷糊的Schema的概念。實際上,schema就是數據庫對象的集合,這個集合包含了各種對象如:表、視圖、存儲過程、索引等。為了區分不同的集合,就需要給不同的集合起不同的名字,默認情況下一個用戶對應一個集合,用戶的schema名等于用戶名,并作為該用戶缺省schema。所以schema集合看上去像用戶名。

如果把database看作是一個倉庫,倉庫很多房間(schema),一個schema代表一個房間,table可以看作是每個房間中的儲物柜,user是每個schema的主人,有操作數據庫中每個房間的權利,就是說每個數據庫映射的user有每個schema(房間)的鑰匙。

我們訪問一個表時,沒有指明該表屬于哪一個schema中的,系統就會自動給我們在表上加上缺省的sheman名。在數據庫中一個對象的完整名稱為schema.object,而不屬user.object。

在MySQL中創建一個Schema和創建一個Database的效果好像是一樣的,但是在sqlserver和orcal數據庫中效果又是不同的。

在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名字一一 對應并且相同。

?

按照SQL標準的解釋,在SQL環境下Catalog和Schema都屬于抽象概念,可以把它們理解為一個容器或者數據庫對象命名空間中的一個層次,主要用來解決命名沖突問題。從概念上說,一個數據庫系統包含多個Catalog,每個Catalog又包含多個Schema,而每個Schema又包含多個數據庫對象(表、視圖、字段等),反過來講一個數據庫對象必然屬于一個Schema,而該Schema又必然屬于一個Catalog,這樣我們就可以得到該數據庫對象的完全限定名稱從而解決命名沖突的問題了;例如數據庫對象表的完全限定名稱就可以表示為:Catalog名稱.Schema名稱.表名稱。這里還有一點需要注意的是,SQL標準并不要求每個數據庫對象的完全限定名稱是唯一的,就象域名一樣,如果喜歡的話,每個IP地址都可以擁有多個域名。

從實現的角度來看,各種數據庫系統對Catalog和Schema的支持和實現方式千差萬別,針對具體問題需要參考具體的產品說明書,比較簡單而常用的實現方式是使用數據庫名作為Catalog名,使用用戶名作為Schema名,具體可參見下表:

最后一點需要注意的是Schema這個單詞,它在SQL環境下的含義與其在數據建模領域中的含義是完全不同的。在SQL環境下,Schema是一組相關的數據庫對象的集合,Schema的名字為該組對象定義了一個命名空間,而在數據建模領域,Schema(模式)表示的是用形式語言描述的數據庫的結構;簡單來說,可以這樣理解,數據建模所講的Schema<也就是元數據>保存在SQL環境下相應Catalog中一個Schema<名叫DEFINITION_SCHEMA>下的表中,同時可以通過查詢該Catalog中的另一個Schema<名叫INFORMATION_SCHEMA>下的視圖而獲取,具體細節不再贅述。

?

轉載于:https://www.cnblogs.com/unique1319/articles/10191566.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450262.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux系統中打rz命令后出現waiting to receive.**B0100000023be50

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 linux系統中打rz命令后出現 waiting to receive.**B0100000023be50 而沒有出現選擇文件彈出框是什么問題&#xff1a; 我本來用的是 gi…

golang學習之旅(2)- go的數據基本數據類型及變量定義方式

叮鈴鈴&#xff0c;這不有人在評論問下一篇何時更新&#xff0c;這不就來了嘛&#xff0c;&#x1f604; 今天我們說說golang 的基本數據類型 基本類型如下&#xff1a; //基本類型 布爾類型&#xff1a;bool 即true 、flase 類似于java中的boolean 字符類型&#xff1a;s…

StackExchange.Redis 官方文檔(六) PipelinesMultiplexers

流水線和復用 糟糕的時間浪費。現代的計算機以驚人的速度產生大量的數據&#xff0c;而且高速網絡通道(通常在重要的服務器之間同時存在多個鏈路)提供了很高的帶寬&#xff0c;但是計算機花費了大量的時間在 等待數據 上面&#xff0c;這也是造成使用持久性鏈接的編程方式越來越…

開發優秀產品的六大秘訣

摘要&#xff1a;本文是Totango的聯合創始人兼公司CEO Guy Nirpaz發表在Mashable.com上的文章。無論是在哪個行業&#xff0c;用戶永遠是一款產品的中心&#xff0c;本文作者就以用戶為中心&#xff0c;為大家講述了六個如何為企業產品添加功能的秘訣。 隨著云計算的發展&#…

Spring Boot下無法加載主類 org.apache.maven.wrapper.MavenWrapperMain問題解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 引言&#xff1a; 在SpringBoot中需要使用mvnw來做相關操作&#xff0c;但是卻有時候會報出達不到MavenWrapperMain的錯誤信息&#xff…

【前端面試】字節跳動2019校招面經 - 前端開發崗(二)

【前端面試】字節跳動2019校招面經 - 前端開發崗&#xff08;二&#xff09; 因為之前的一篇篇幅有限&#xff0c;太長了看著也不舒服&#xff0c;所以還是另起一篇吧?一、 jQuery和Vue的區別 jQuery 輕量級Javascript庫Vue 漸進式Javascript-MVVM框架jQuery和Vue的對比 jQuer…

SpringBoot與SpringCloud的版本說明及對應關系

轉載原文地址&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

leetcode 8: 字符串轉整數(atoi)

實現 atoi&#xff0c;將字符串轉為整數。 該函數首先根據需要丟棄任意多的空格字符&#xff0c;直到找到第一個非空格字符為止。如果第一個非空字符是正號或負號&#xff0c;選取該符號&#xff0c;并將其與后面盡可能多的連續的數字組合起來&#xff0c;這部分字符即為整數的…

優秀產品頁設計:將訪問者轉化成客戶

摘要&#xff1a;本文是對外文《 Better Product Pages: Turn Visitors Into Customers 》的翻譯&#xff0c;編譯內容如下&#xff1a; 展示產品、服務的方法是其獲得成功的關鍵。在Web上&#xff0c;你留給用戶的第一印象是至關重要的。 如果有人訪問你的網站&#xff0c;一定…

計算機網絡學習方法

原文見&#xff1a;http://blog.csdn.net/qq_33506160/article/details/51872708 一、網絡課程究竟難在哪&#xff1f; 1&#xff0e;內容比較亂 如果把《計算機網絡技術基礎》看做是一本計算機網絡導論方面的教材&#xff0c;就不會認為亂了&#xff0c;因為導論就是為了解決知…

小程序類似抖音視頻整屏切換

更新 現在已經更新了github地址和效果gif&#xff0c;可在文章最后查看。如果我的代碼對你有用&#xff0c;請幫我隨手star一下。 需求 最近在項目中需要加一個功能&#xff0c;在小程序中將已有的短視頻功能&#xff0c;按照抖音的方式來瀏覽&#xff0c;整屏&#xff0c;可上…

Coding For Fun 32小時:充滿創造、激情、團結的編程馬拉松

摘要&#xff1a;Coding for Fun大賽是2012中國軟件開發者大會&#xff08;SDCC&#xff09;的重要環節。由六名黑馬學員組成的“天翼二隊”&#xff0c;經過32小時的“血拼”&#xff0c;憑大賽作品“語音控”&#xff0c;獲得了本次大賽的“最佳設計獎”。本文是該隊隊員的參…

centos6.8安裝oracle12C 詳細步驟講解

2019獨角獸企業重金招聘Python工程師標準>>> centos6.8安裝oracle12C 詳細步驟講解 安裝前環境配置 1 root身份安裝依賴包 [rootdlp ~]# yum -y install binutils compat-libcap1 compat-libstdc-33 compat-libstdc-33.i686 gcc gcc-c glibc glibc.i686 glibc-deve…

解決 springboot 項目:找不到或無法加載主類

Spring Boot下無法加載主類 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 我什么也沒有改&#xff0c;啟動服務報錯如題&#xff1a;找不到或無法加載主類 解決&#xff1a;什么也不…

管理好你的愿望,人生將另一個樣

別讓欲望控制了你欲望是人的本性。人生在世&#xff0c;誰都會有欲望。物欲、食欲、情欲、發財欲、求知欲……欲望是消防隊也無法撲滅的火。作為人&#xff0c;我們不能消除欲望&#xff0c;也不能讓欲望漫無邊際地增長&#xff0c;所以&#xff0c;我們應該把握好欲望的尺度&a…

25 模塊和包

今日內容 import from xxx import xxxx 金庸 1. 導入模塊的執行的步驟 2. 自定義模塊 3. 自定義包(難點) 一個表達式 -> 一條語句 -> 語句塊 -> 函數 -> 類 -> 模塊 -> 包 -> 項目 包就是我們的文件夾, 包內可以寫很…

【許曉笛】 EOS 智能合約案例解析(2)

詳解 EOS 智能合約的 cpp 文件 之前的文章介紹了 eosio.token 智能合約的 hpp 文件&#xff0c;這次向大家介紹 eosio.token.cpp 文件&#xff0c;cpp 文件即 C 代碼文件&#xff0c;智能合約所有的業務邏輯內容都是在 cpp 文件中實現的。 eosio.token.cpp 文件地址&#xff1a…

java 中 transient關鍵字

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 java語言的關鍵字&#xff0c;變量修飾符&#xff0c;如果用transient聲明一個實例變量&#xff0c;當對象存儲時&#xff0c;它的值不需…

java中int轉成String位數不足前面補零

java中int轉成String位數不足前面補零 轉載自&#xff1a;http://ych0108.iteye.com/blog/2174134java中int轉String位數不夠前面補零 String.format("%010d", 25); //25為int型 10代表前面要補的字符 10代表字符串長度 d表示參數為整數類型 今天想將int 轉String 位…

Oops! the requested resource is not found!

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 情況一&#xff1a;調用 dubbo 服務失敗&#xff0c;報錯如題&#xff1a;Oops! the requested resource is not found! 原因很簡單&am…