schema概念定义
数据库中的schema有多种不同含义和实现:
- 数据库中的数据模型(data model)
- 数据库中的整个数据结构(data structure)和程序(program)
- 命名空间(namespace)是SQL的一个元素
1. Data Model
数据库schema的含义之一是
数据库中表之间的结构
,具体来说有表、数据类型、主键和唯一键以及外键约束。
2.数据库实现
更抽象的概念上,
数据库schema指的是整个数据库元素:表、约束、视图、存储过程和数据类型等。
3.Namespace(element of SQL)
schema的另一个含义是
大多数关系型数据库引擎用于对对象分组的特定元素
。
可以把schema认为是一个命名空间(namespace)或容器(container),其中包含有表、视图和函数等。
数据库(database)的所有者就是schema的所有者,一个schema一般属于一个database而一个database可以有多个schema。
不同的schema中的name可以重复。
大多数db中可以使用以下语法来创建删除schema,以及更改schema的名称和用户。
CREATE SCHEMA HumanResources;
DROP SCHEMA HumanResources;
ALTER SCHEMA HumanResources RENAME TO Human;
ALTER SCHEMA HumanResources OWNER TO postgres;
该语句会创建一个新的schema并且是该schema中每一个对象的
前缀
。
为什么使用schema(namespace)
主要在以下的场景中
将database拆分为多个schema
(namespace):
-
容易为整个schema来
分配权限
,可以基于用户访问权限应用安全权限来分隔和保护数据库对象 -
为两个或多个不同的表(或其他对象)使用
同一个name
-
对相似的对象进行
分组
来降低复杂度,数据库对象的逻辑分组可以被数据库管理起来,schema可以将数据库对象组织成逻辑分组。 - 同一个schema可以用在不同的数据库中
- 可以很容易地对几个schema的ownership进行切换
RDBMS中的支持
实际上所有的关系模型都支持schema(namespace),它也是SQL标准的一部分。但是不同数据库在schema函数以及是否支持“数据库(database)”层次结构上存在着差异。
DBMS | Database/Schema | Implicit schema |
---|---|---|
Just schemas |
||
Oracle | Server => Schema = User | |
MySQL | Server => Database = Schema | |
MariaDB | Server => Database = Schema | |
Teradata | Server => Database = Schema | |
Firebird | Server => Database = Schema | |
Interbase | Server => Database = Schema | |
SQLite | File = Database = Schema | main |
Databases and schemas |
||
SQL Server | Database => Schema | dbo |
PostgreSQL | Database => Schema | public |
Azure SQL Database | Database => Schema | dbo |
IBM Db2 | Database => Schema | |
Amazon Redshift | Database => Schema | public |
Snowflake | Warehouse => Database => Schema | public |
SAP/Sybase ASE | Database => Schema | dbo |
SAP HANA | Database => Schema | |
Vertica | Database => Schema | public |
IBM Informix | Database => Schema |
参考文献