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 |
参考文献
- What is Database Schema