數據庫中的Schema是什麼?

參考:http://database.guide/what-is-a-database-schema/

在數據庫中,schema(發音 “skee-muh” 或者“skee-mah”,中文叫模式)是數據庫的組織和結構,schemas andschemata都可以作爲複數形式。模式中包含了schema對象,可以是(table)、(column)、數據類型(data type)、視圖(view)、存儲過程(stored procedures)、關係(relationships)、主鍵(primary key)、外鍵(foreign key)等。數據庫模式可以用一個可視化的圖來表示,它顯示了數據庫對象及其相互之間的關係

 

以上是模式圖的一個簡單例子,顯示了三個表及其數據類型、表之間的關係以及主鍵和外鍵,以下是數據庫模式的一個更復雜的例子。

 

在這種情況下,模式圖分爲四個部分:

(1)Customer Data(客戶數據):與客戶有關的數據,如姓名,地址等

(2)Business(業務):業務所需的數據,例如員工,商店位置,付款細節等

(3)Inventory(庫存):所有產品的細節。在這裏,產品是電影,所以它包含電影標題,類別,演員等數據。

(4)Views(視圖):關於用於評估的數據的特別觀點,所以通過這些模式圖,我們可以進一步創建一個數據庫,實際上,MySQL Workbench允許我們直接從圖中生成一個Create Table腳本,然後我們就可以直接用這個腳本去創建一個數據庫,還可以直接將一個數據庫轉換爲一個關係圖表。

Schema和DataBase是否等同?

涉及到數據庫的模式有很多疑惑,問題經常出現在模式和數據庫之間是否有區別,如果有,區別在哪裏。

取決於數據庫供應商

對schema(模式)產生疑惑的一部分原因是數據庫系統傾向於以自己的方式處理模式

1MySQL的文檔中指出,在物理上,模式與數據庫是同義的,所以,模式和數據庫是一回事。

2但是,Oracle的文檔卻指出,某些對象可以存儲在數據庫中,但不能存儲在schema中。 因此,模式和數據庫不是一回事。

(3)而根據這篇SQL Server技術文章SQLServer technical article,schema是數據庫SQL Server內部的一個獨立的實體。 所以,他們也不是一回事。

因此,取決於您使用的RDBMS,模式和數據庫可能不一樣。

SQL標準對schema如何定義?

ISO/IEC 9075-1 SQL標準中將schema定義爲描述符的持久命名集合(a persistent, named collection of descriptors),如果你之前對schema的定義疑惑不解,希望看了我的這篇文章會好一些,起碼不會更差。

廣義上

造成疑惑的另一個原因可能是由於schema這一術語具有如此廣泛的含義,因爲它在不同的環境下有不同的含義,schema一詞源於希臘語skhēma,意思是形態(form),輪廓(figure),形狀(shape)或方案(plan)。Schema在心理學中被用來描述組織信息類別及其之間關係的有組織的思維或行爲模式。我們在設計一個數據庫之前,還需要看看數據中的信息種類和它們之間的關係, 在我們開始使用DBMS中的物理模式之前,我們需要創建一個概念模式。在軟件開發中討論模式時,可以討論概念模式、物理模式、內部模式、外部模式、邏輯模式等,每一個都有其特定的含義。

DBMS的schema定義

以下是三個領先的關係數據庫系統的schema定義:

MySQL

Conceptually, a schema is a set of interrelated database objects, such as tables, table columns, data types of the columns, indexes, foreign keys, and so on. These objects are connected through SQL syntax, because the columns make up the tables, the foreign keys refer to tables and columns, and so on. Ideally, they are also connected logically, working together as part of a unified application or flexible framework. For example, theINFORMATION_SCHEMA and performance_schema databases use “schema” in their names to emphasize the close relationships between the tables and columns they contain.

In MySQL, physically, aschema is synonymous with adatabase. You can substitute the keywordSCHEMA instead ofDATABASE in MySQL SQL syntax, for example using CREATE SCHEMA instead of CREATE DATABASE.

Some other database products draw a distinction. For example, in the Oracle Database product, aschema represents only a part of a database: the tables and other objects owned by a single user.

MySQL官方文檔指出,從概念上講,模式是一組相互關聯的數據庫對象,如表,表列,列的數據類型,索引,外鍵等等。但是從物理層面上來說,模式與數據庫是同義的。你可以在MySQL的SQL語法中用關鍵字SCHEMA替代DATABASE,例如使用CREATE SCHEMA來代替CREATE DATABASE

參考: MySQL Glossary, MySQL 5.7 參考手冊. MySQL, Retrieved 6 June 2016。

SQL Server

The names of tables, fields, data types, and primary and foreign keys of a database.

SQL Server官方文檔指出,schema中包含了數據庫的表,字段,數據類型以及主鍵和外鍵的名稱。參考:SQL Server Glossary. SQL Server 2016 Technical Documentation. Microsoft Developer Network. Retrieved 6 June 2016.

Oracle Database

Oracle中的schema系統與其他數據庫系統大不相同,Oracle的schema與數據庫用戶密切相關。

A schema is a collection of logical structures of data, or schema objects. A schema is owned by a database user and has the same name as that user. Each user owns a single schema.

Oracle官方文檔指出,schema是數據或模式對象的邏輯結構的集合,由數據庫用戶擁有,並且與該用戶具有相同的名稱,也就是說每個用戶擁有一個獨立的schema。

參考: Oracle Database Objects. Oracle Database Online Documentation 12c Release 1 (12.1). Oracle Help Center. Retrieved 6 June 2016.

如果想了解更多關於schema的內容,可以參考這篇文章schema definitions by DBMS.

創建Schema

儘管上述三個DBMS在定義schema方面有所不同,還是有一個共同點,就是每一個都支持CREATE SCHEMA語句。

MySQL

在MySQL中,CREATE SCHEMA創建了一個數據庫,這是因爲CREATE SCHEMACREATE DATABASE的同義詞。 換句話說,你可以使用CREATE SCHEMA或者CREATE DATABASE來創建一個數據庫。

Oracle Database

在Oracle中,CREATE SCHEMA語句實際上並不創建一個模式,這是因爲已經爲在創建用戶時,數據庫用戶就已經創建了一個模式,也就是說在ORACLE中CREATE USER就創建了一個schema,CREATE SCHEMA語句允許你將schema同表和視圖關聯起來,並在這些對象上授權,從而不必在多個事務中發出多個SQL語句。

SQL Server

在SQL Server中,CREATE SCHEMA將按照名稱創建一個模式,與MySQL不同,CREATE SCHEMA語句創建了一個單獨定義到數據庫的模式。和ORACLE也不同,CREATE SCHEMA語句實際創建了一個模式(前面說到這個語句在ORACLE中不創建一個模式),在SQL Server中,一旦創建了模式,就可以往模式中添加用戶和對象。

總結

schema這個詞可以用在很多不同的環境中,在特定數據庫管理系統創建一個schema時,您需要使用DBMS特定定義模式,當你切換到一個新的數據庫管理系統時,一定要查看該系統是如何定義schema的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章