电竞比分网-中国电竞赛事及体育赛事平台

分享

數(shù)據(jù)庫中的Schema是什么?

 一本正經(jīng)地胡鬧 2019-05-29

翻譯自:http://database.guide/what-is-a-database-schema/

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

 

以上是模式圖的一個(gè)簡單例子,顯示了三個(gè)表及其數(shù)據(jù)類型、表之間的關(guān)系以及主鍵和外鍵,以下是數(shù)據(jù)庫模式的一個(gè)更復(fù)雜的例子。

 

在這種情況下,模式圖分為四個(gè)部分:

(1)Customer Data(客戶數(shù)據(jù)):與客戶有關(guān)的數(shù)據(jù),如姓名,地址等(2)Business(業(yè)務(wù)):業(yè)務(wù)所需的數(shù)據(jù),例如員工,商店位置,付款細(xì)節(jié)等(3)Inventory(庫存):所有產(chǎn)品的細(xì)節(jié)。在這里,產(chǎn)品是電影,所以它包含電影標(biāo)題,類別,演員等數(shù)據(jù)。(4)Views(視圖):關(guān)于用于評估的數(shù)據(jù)的特別觀點(diǎn),所以通過這些模式圖,我們可以進(jìn)一步創(chuàng)建一個(gè)數(shù)據(jù)庫,實(shí)際上,MySQL Workbench允許我們直接從圖中生成一個(gè)Create Table腳本,然后我們就可以直接用這個(gè)腳本去創(chuàng)建一個(gè)數(shù)據(jù)庫,還可以直接將一個(gè)數(shù)據(jù)庫轉(zhuǎn)換為一個(gè)關(guān)系圖表。

Schema和DataBase是否等同?

涉及到數(shù)據(jù)庫的模式有很多疑惑,問題經(jīng)常出現(xiàn)在模式和數(shù)據(jù)庫之間是否有區(qū)別,如果有,區(qū)別在哪里。

取決于數(shù)據(jù)庫供應(yīng)商

對schema(模式)產(chǎn)生疑惑的一部分原因是數(shù)據(jù)庫系統(tǒng)傾向于以自己的方式處理模式

1MySQL的文檔中指出,在物理上,模式與數(shù)據(jù)庫是同義的,所以,模式和數(shù)據(jù)庫是一回事。2但是,Oracle的文檔卻指出,某些對象可以存儲在數(shù)據(jù)庫中,但不能存儲在schema中。 因此,模式和數(shù)據(jù)庫不是一回事。(3)而根據(jù)這篇SQL Server技術(shù)文章SQLServer technical article,schema是數(shù)據(jù)庫SQL Server內(nèi)部的一個(gè)獨(dú)立的實(shí)體。 所以,他們也不是一回事。

因此,取決于您使用的RDBMS,模式和數(shù)據(jù)庫可能不一樣。

SQL標(biāo)準(zhǔn)對schema如何定義?

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

廣義上

造成疑惑的另一個(gè)原因可能是由于schema這一術(shù)語具有如此廣泛的含義,因?yàn)樗诓煌沫h(huán)境下有不同的含義,schema一詞源于希臘語skhēma,意思是形態(tài)(form),輪廓(figure),形狀(shape)或方案(plan)。Schema在心理學(xué)中被用來描述組織信息類別及其之間關(guān)系的有組織的思維或行為模式。我們在設(shè)計(jì)一個(gè)數(shù)據(jù)庫之前,還需要看看數(shù)據(jù)中的信息種類和它們之間的關(guān)系, 在我們開始使用DBMS中的物理模式之前,我們需要創(chuàng)建一個(gè)概念模式。在軟件開發(fā)中討論模式時(shí),可以討論概念模式、物理模式、內(nèi)部模式、外部模式、邏輯模式等,每一個(gè)都有其特定的含義。

DBMS的schema定義

以下是三個(gè)領(lǐng)先的關(guān)系數(shù)據(jù)庫系統(tǒng)的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官方文檔指出,從概念上講,模式是一組相互關(guān)聯(lián)的數(shù)據(jù)庫對象,如表,表列,列的數(shù)據(jù)類型,索引,外鍵等等。但是從物理層面上來說,模式與數(shù)據(jù)庫是同義的。你可以在MySQL的SQL語法中用關(guān)鍵字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中包含了數(shù)據(jù)庫的表,字段,數(shù)據(jù)類型以及主鍵和外鍵的名稱。參考:SQL Server Glossary. SQL Server 2016 Technical Documentation. Microsoft Developer Network. Retrieved 6 June 2016.

 

Oracle Database

Oracle中的schema系統(tǒng)與其他數(shù)據(jù)庫系統(tǒng)大不相同,Oracle的schema與數(shù)據(jù)庫用戶密切相關(guān)。

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是數(shù)據(jù)或模式對象的邏輯結(jié)構(gòu)的集合,由數(shù)據(jù)庫用戶擁有,并且與該用戶具有相同的名稱,也就是說每個(gè)用戶擁有一個(gè)獨(dú)立的schema。

 

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

如果想了解更多關(guān)于schema的內(nèi)容,可以參考這篇文章schema definitions by DBMS.

創(chuàng)建Schema

盡管上述三個(gè)DBMS在定義schema方面有所不同,還是有一個(gè)共同點(diǎn),就是每一個(gè)都支持CREATE SCHEMA語句。

MySQL

在MySQL中,CREATE SCHEMA創(chuàng)建了一個(gè)數(shù)據(jù)庫,這是因?yàn)?code>CREATE SCHEMA是CREATE DATABASE的同義詞。 換句話說,你可以使用CREATE SCHEMA或者CREATE DATABASE來創(chuàng)建一個(gè)數(shù)據(jù)庫。

Oracle Database

在Oracle中,CREATE SCHEMA語句實(shí)際上并不創(chuàng)建一個(gè)模式,這是因?yàn)橐呀?jīng)為在創(chuàng)建用戶時(shí),數(shù)據(jù)庫用戶就已經(jīng)創(chuàng)建了一個(gè)模式,也就是說在ORACLE中CREATE USER就創(chuàng)建了一個(gè)schema,CREATE SCHEMA語句允許你將schema同表和視圖關(guān)聯(lián)起來,并在這些對象上授權(quán),從而不必在多個(gè)事務(wù)中發(fā)出多個(gè)SQL語句。

SQL Server

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

總結(jié)

schema這個(gè)詞可以用在很多不同的環(huán)境中,在特定數(shù)據(jù)庫管理系統(tǒng)創(chuàng)建一個(gè)schema時(shí),您需要使用DBMS特定定義模式,當(dāng)你切換到一個(gè)新的數(shù)據(jù)庫管理系統(tǒng)時(shí),一定要查看該系統(tǒng)是如何定義schema的。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多