Loading AI tools
来自维基百科,自由的百科全书
綱要(英語:Schema,又稱模式),香港和中國大陸翻譯為模式或架構,在資料庫系統中是形式語言描述的一種結構,是對象的集合,[1]可包含各種對象如:表、欄位、關係模型、視圖、索引、包、存儲過程、子程序、隊列、觸發器、數據類型、序列、物化視圖、同義詞(synonym)、database link、directory、XML schema等。[2][3]
此條目可參照英語維基百科相應條目來擴充。 |
模式的益處:
在Oracle資料庫中,schema object是一類邏輯資料庫存儲結構。[4]
Oracle的資料庫會為每個在資料庫的用戶關聯一個獨立的schema。[5]
schema包括有一堆schema objects的集合。schema objects的例子包括有:
與此同時,非schema objects可能包括[6]:
Schema objects跟磁碟上用來儲存資料的物理檔案並沒有一對一的關連。不過,Oracle資料庫會將schema objects以虛擬的邏輯形式儲存在資料庫的表空間裡。每一件schema object的數據在物理上如同其他表空間的內容一樣,儲存在表空間所屬的其中一個datafile裡。部分objects(例如:表、索引、叢集等)所佔的空間,資料庫管理員可控制Oracle的RDBMS可如何在表空間的datafile內如何分配與schema object。
schemas與表空間之間沒有必然的關係:表空間可以包含來自不同schema的objects,並且單個schema的object可以位於不同的表空間中。
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 mySchema1.myTable1;
刪除一個架構,該架構不能包含對象:
DROP SCHEMA mySchema3;
在 SQL Server 2000 中,資料庫用戶和架構是隱式同一。每個資料庫用戶都是與該用戶同名的架構的所有者。對象的所有者在功能上與包含它的架構所有者相同。因而,SQL Server 2000 中的完全限定名稱的「架構」也是資料庫中的用戶。
SQL Server 2005 中,架構獨立於創建它們的資料庫用戶而存在。多個用戶可以共享一個默認架構進行統一的名稱解析。 刪除資料庫用戶不需要重命名該用戶架構所包含的對象。完全限定的對象名稱現在包含四部分:server.database.schema.object。如果未定義DEFAULT_SCHEMA 選項設置和更改默認架構,則資料庫用戶將把 dbo 作為其默認架構。
CREATE SCHEMA是CREATE DATABASE的同義詞。
PostgreSQL資料庫集群可以有一個或多個命名的資料庫。用戶和用戶組在整個集群的範圍內是共享的,即不能有同名用戶。任何給定的客戶連接(connection)都只能訪問一個資料庫。
一個資料庫包含一個或多個命名的模式, 模式包含其它命名的對象,如表、數據類型、函數、操作符等。在不同的模式里使用同名的對象不會導致衝突。例如,schema1 和 schemaA 都可以包含叫做 mytable 的表。一個用戶可以訪問所連接的資料庫中的任意模式中的對象,只要有這個權限。
Apache Derby資料庫(即Java DB)的任何connection的當前schema,默認是對應於該用戶名的一個schema。如果無用戶名被提供,那麼當前用戶名與當前schema預設是APP。
但即使當前schema被設置為用戶名,這個schema仍然可能不存在。一個schema只能被創建:通過CREATE SCHEMA語句顯式創建或者創建一個對象(例如表等)來隱式創建。
APP schema總是存在,不需要創建。
如果你的程序試圖訪問當前schema但該schema下沒有創建任何對象,就會遇到「schema not exists」錯誤。[8]
ISO/IEC 9075-1 SQL標準中將schema定義為描述符的持久命名集合(a persistent, named collection of descriptors)。
創建一個schema:
create schema demo_schema;
在指定模式里創建表:
CREATE TABLE myschema.mytable ( ... );
刪除一個空的schema:
drop schema myschema;
刪除一個模式以及模式裡面所有的對象:
drop schema MySchema CASCADE;
默認的pulic schema:創建表時,如果沒有指定schema,則會自動被歸屬到資料庫的「public」的模式中。下面兩種創建表的方式是等效的:
CREATE TABLE tableName(...); CREATE TABLE public.tableName(...);
用戶默認是看不到模式中不屬於他們所有的對象。
模式權限:
系統使用一個模式的列表作為搜索路徑來解析一個表屬於哪個模式。搜索路徑中的第一個模式是當前模式;CREATE TABLE 沒有聲明模式名的時候,新建的表屬於當前模式。
查看搜索路徑:
SHOW search_path; 'PostgreSQL数据库
設置搜索路徑
SET search_path TO myschema,public; 'PostgreSQL数据库
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.