Tzhtw 綱要 資料庫 zhcn 架構 資料庫 zhhk 架構 資料庫 zhtw 綱要；zhhk 架構；zhhans 架構（zhhk ，又稱模式；zhhans ，又稱模式），zhtw 香港和中國大陸翻譯為模式或架構；zhhk 臺灣翻譯為綱要；zhhans 臺灣翻譯為綱要，在資料庫系統中是形式語言描述的一種結構，是物件的集合，可包含各種物件如：表、欄位、關係模型、檢視、索引、包、儲存過程、子程式、佇列、觸發器、資料型別、序列、、（synonym）、database link、directory、XML schema 等。 模式的益處： 允許多個使用者使用一個數據庫而不會干擾其它使用者。 把資料庫物件組織成邏輯組，讓它們更便於管理。 第三方的應用可以放在不同的模式中，不會和其它物件的名字衝突。 Oracle 資料庫實現 在 Oracle 資料庫中，schema object 是一類邏輯。 Oracle 的資料庫會為每個在資料庫的使用者關聯一個獨立的 schema。 schema 包括有一堆 schema objects 的集合。schema objects 的例子包括有： 資料庫表 檢視 序列 資料庫索引 資料庫叢集 資料庫連結 快照 儲存程式 functions packages 與此同時，非 schema objects 可能包括： users roles contexts directory objects Schema objects 跟磁碟上用來儲存資料的物理檔案並沒有一對一的關連。不過，Oracle 資料庫會將 schema objects 以虛擬的邏輯形式儲存在資料庫的表空間裡。每一件 schema object 的資料在物理上如同其他表空間的內容一樣，儲存在表空間所屬的其中一個裡。部分 objects（例如：表、索引、叢集等）所佔的空間，資料庫管理員可控制 Oracle 的 RDBMS 可如何在表空間的 datafile 內如何分配與 schema object。 schemas 與表空間之間沒有必然的關係：表空間可以包含來自不同 schema 的 objects，並且單個 schema 的 object 可以位於不同的表空間中。 SQL Server 資料庫實現 SQL Server 資料庫把 schema 譯作 架構。架構是資料庫中物件的容器。架構是形成單個名稱空間的資料庫實體的集合。名稱空間是一個集合，其中每個元素的名稱都是唯一的。預設架構 DBO。訪問預設架構中的物件時，不需要指定架構的名稱。微軟建議使用兩段式物件名稱： 架構名。物件名 建立架構的語句舉例： CREATE SCHEMA mySchema AUTHORIZATION user1 CREATE TABLE myTable1 source int cost int partnumber int GRANT SELECT TO user2 Deny SELECT TO AnotherUser3 上述語句建立一個架構 mySchema，所有者為 user1，包含表 myTable1，授予 user2 以 SELECT 許可權，拒絕給 AnotherUser3 以 SELECT 許可權。 授予 撤銷使用者對架構的所有權： GRANT INSERT ON SCHEMA mySchema1 To myUser2 REVOKE INSERT ON SCHEMA mySchema1 To myUser2 把物件從一個架構移動到另一個架構（必須同個資料庫）： ALTER SCHEMA mySchema2 TRANSFER mySchema1myTable1 刪除一個架構，該架構不能包含物件： DROP SCHEMA mySchema3 歷史 在 SQL Server 2000 中，資料庫使用者和架構是隱式同一。每個資料庫使用者都是與該使用者同名的架構的所有者。物件的所有者在功能上與包含它的架構所有者相同。因而，SQL Server 2000 中的完全限定名稱的 架構 也是資料庫中的使用者。 SQL Server 2005 中，架構獨立於建立它們的資料庫使用者而存在。多個使用者可以共享一個預設架構進行統一的名稱解析。 刪除資料庫使用者不需要重新命名該使用者架構所包含的物件。完全限定的物件名稱現在包含四部分：serverdatabaseschemaobject。如果未定義 DEFAULT_SCHEMA 選項設定和更改預設架構，則資料庫使用者將把 dbo 作為其預設架構。 MySQL 資料庫實現 MySQL 中 Schema 等價於 資料庫。 CREATE SCHEMA 是 CREATE DATABASE 的同義詞。 PostgreSQL 資料庫實現 PostgreSQL 資料庫叢集可以有一個或多個命名的資料庫。使用者和使用者組在整個叢集的範圍內是共享的，即不能有同名使用者。任何給定的客戶連線（connection）都只能訪問一個數據庫。 一個數據庫包含一個或多個命名的模式， 模式包含其它命名的物件，如表、資料型別、函式、運算子等。在不同的模式裡使用同名的物件不會導致衝突。例如，schema1 和 schemaA 都可以包含叫做 mytable 的表。一個使用者可以訪問所連線的資料庫中的任意模式中的物件，只要有這個許可權。 Apache Derby 資料庫實現 Apache Derby 資料庫（即 Java DB）的任何 connection 的當前 schema，預設是對應於該使用者名稱的一個 schema。如果無使用者名稱被提供，那麼當前使用者名稱與當前 schema 預設是 APP。 但即使當前 schema 被設定為使用者名稱，這個 schema 仍然可能不存在。一個 schema 只能被建立：透過 CREATE SCHEMA 語句顯式建立或者建立一個物件（例如表等）來隱式建立。 APP schema 總是存在，不需要建立。 如果你的程式試圖訪問當前 schema 但該 schema 下沒有建立任何物件，就會遇到 schema not exists 錯誤。 SQL 實現 ISOIEC 90751 SQL 標準中將 schema 定義為描述符的持久命名集合（a persistent named collection of descriptors）。 建立一個 schema create schema demo_schema 在指定模式裡建立表： CREATE TABLE myschemamytable 刪除一個空的 schema： drop schema myschema 刪除一個模式以及模式裡面所有的物件： drop schema MySchema CASCADE 預設的 pulic schema：建立表時，如果沒有指定 schema，則會自動被歸屬到資料庫的 public 的模式中。下面兩種建立表的方式是等效的： CREATE TABLE tableName CREATE TABLE publictableName 模式的許可權 使用者預設是看不到模式中不屬於他們所有的物件。 模式許可權： USAGE 許可權 CREATE 許可權：在別人的模式裡建立物件。預設時，每個使用者在 public 模式上有 CREATE 許可權。撤銷這個許可權：REVOKE CREATE ON public FROM PUBLIC （第一個 public 是模式，第二個 public 意思是 所有使用者。 第一句裡它是個識別符號，而第二句裡是個關鍵字，所以有不同的大小寫） 模式搜尋路徑 系統使用一個模式的列表作為搜尋路徑來解析一個表屬於哪個模式。搜尋路徑中的第一個模式是當前模式；CREATE TABLE 沒有宣告模式名的時候，新建的表屬於當前模式。 檢視搜尋路徑： SHOW search_path PostgreSQL 資料庫 設定搜尋路徑 SET search_path TO myschemapublic PostgreSQL 資料庫 參考文獻 參看 資料元 ER 模型 知識表示 外部連結 TipTrick Online Database Schema Samples Library Database Schema Samples Designing the Star Schema Database Category 資料管理 Category 資料建模