【database】数据库schema概念解读

  • Post author:
  • Post category:其他




schema概念定义

数据库中的schema有多种不同含义和实现:

  1. 数据库中的数据模型(data model)
  2. 数据库中的整个数据结构(data structure)和程序(program)
  3. 命名空间(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):

  1. 容易为整个schema来

    分配权限

    ,可以基于用户访问权限应用安全权限来分隔和保护数据库对象
  2. 为两个或多个不同的表(或其他对象)使用

    同一个name
  3. 对相似的对象进行

    分组

    来降低复杂度,数据库对象的逻辑分组可以被数据库管理起来,schema可以将数据库对象组织成逻辑分组。
  4. 同一个schema可以用在不同的数据库中
  5. 可以很容易地对几个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



参考文献


  1. What is Database Schema