关于数据库中的schema
schema:模式,在SQL Server中文版文档中翻译为架构。
在数据库学习过程中,有一个schema概念,如概念模式、物理模式、内部模式、外部模式、逻辑模式,以及DBMS的schema等,每一个都有其特定的含义,在不同语境下的含义不同,容易初学者迷糊。
DBMS的schema就是数据库对象的集合,这个集合包含了各种对象如:表、视图、存储过程、索引等。
☆ISO/IEC 9075-1 SQL标准中将schema定义为描述符的持久命名集合(a persistent, named collection of descriptors)。
☆MySQL的文档中指出,在物理上,模式与数据库是同义的,所以,模式和数据库是一回事。从概念上讲,模式是一组相互关联的数据库对象,如表,表列,列的数据类型,索引,外键等等。但是从物理层面上来说,模式与数据库是同义的。你可以在MySQL的SQL语法中用关键字SCHEMA替代DATABASE,例如使用CREATE SCHEMA来代替CREATE DATABASE。
参考: MySQL Glossary之schema ,链接是MySQL :: MySQL 5.7 Reference Manual :: MySQL Glossary
☆Oracle的文档却指出,某些对象可以存储在数据库中,但不能存储在schema中。 因此,模式和数据库不是一回事。Oracle的schema与数据库用户密切相关。schema是数据或模式对象的逻辑结构的集合,由数据库用户拥有,并且与该用户具有相同的名称,也就是说每个用户拥有一个独立的schema。参考 Oracle Database Objects之 Schema Objects,链接是Database Objects
☆SQL Server中schema是数据库SQL Server内部的一个独立的实体,包括表、字段、数据类型以及数据库的主键和外键的名称。参考:SQL Server Glossary之database schema ,链接是 Glossary | Microsoft Learn
要理解SQL Server的架构(SCHEMA)可以参考
权限层次结构(数据库引擎)权限层次结构(数据库引擎) - SQL Server | Microsoft Learn
安全对象范围:架构 安全对象 - SQL Server | Microsoft Learn
尽管上述三个DBMS在定义schema方面有所不同:
★MySQL
在MySQL中,CREATE SCHEMA创建了一个数据库,这是因为CREATE SCHEMA是CREATE DATABASE的同义词。 换句话说,你可以使用CREATE SCHEMA或者CREATE DATABASE来创建一个数据库。
★Oracle Database
在Oracle中,CREATE SCHEMA语句实际上并不创建一个模式,这是因为已经为在创建用户时,数据库用户就已经创建了一个模式,也就是说在ORACLE中CREATE USER就创建了一个schema,CREATE SCHEMA语句允许你将schema同表和视图关联起来,并在这些对象上授权,从而不必在多个事务中发出多个SQL语句。
Oracle数据库将一个单独的模式与每个数据库用户相关联。一个模式由一组模式对象组成。
在Oracle数据库中不能新建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决,在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同。
★SQL Server
在SQL Server中,CREATE SCHEMA将按照名称创建一个模式,与MySQL不同,CREATE SCHEMA语句创建了一个单独定义到数据库的模式。和ORACLE也不同,CREATE SCHEMA语句实际创建了一个模式(前面说到这个语句在ORACLE中不创建一个模式),在SQL Server中,一旦创建了模式,就可以往模式中添加用户和对象。
另外,当我们用create user创建数据库用户时,我们可以用该用户指定一个已经存在的schema作为默认的schema,如果我们不指定,则该用户所默认的schema即为dbo schema。
关于数据库系统模式(schema)和模型(model)还可参见/cnds123/article/details/46678367
参考
What is a Database Schema? What is a Database Schema?
(译文见数据库中的Schema是什么?_我是蚁人的博客-****博客)
如何理解数据库的Schema模式如何理解数据库的Schema模式 – 标点符
在数据库中,schema、catalog分别指的是什么?在数据库中,schema、catalog分别指的是什么? - 知乎