什么是Database Schema

翻译自:https://database.guide/what-is-a-database-schema/

用数据库术语来说,schema(读作“ skee-muh”或“ skee-mah”)是数据库的组织和结构。schemas和schemata都可以用作其复数形式

schema包含的对象可以是表,列,数据类型,视图,存储过程,关系,主键,外键等。

A database schema可以用可视化的图表表示,下面的图表显示了数据库对象及其相互之间的关系。

什么是Database Schema

一个小型的包含三个表的数据库的基本架构图

上面是一个架构图的简单示例。它有三个表,以及它们的数据类型,表之间的关系以及它们的主键和外键

这是一个更复杂的database schema示例:
什么是Database Schema

A database schema

在这种情况下,schema已分为四个部分:

  • 客户数据:与客户相关的数据,例如他们的姓名,地址等
  • 业务:开展业务所需的数据,例如人员,商店位置,付款明细等
  • 库存:所有产品的详细信息。在这种情况下,产品是电影,因此它包含诸如电影标题,其类别,演员等数据
  • 视图:用于评估的数据的特殊视图

schema和database是一样的吗

关于database和schema有很多困惑。经常会出现的问题就是schema和database之间是否存在差异

取决于供应商

  • MySQL文档指出,从物理上讲,schema与database同义。因此,schema和database是一样的
  • 但是,Oracle数据库文档指出某些对象可以存储在database中,但不能存储在schema中。因此,schema和database是两个不同的事物
  • 根据SQL Server的技术文章,schema是database内部的一个单独实体。因此,它们是两个不同的事物

SQL标准呢?

ISO/IEC 9075-1 SQL standard将schema定义为持久的、命名的描述符集合

广义

造成混淆的另一个原因可能是因为术语具有非常广泛的含义。在不同的上下文中它具有不同的含义

schema一词源于希腊语skhēma,意为形式,图形,形状或计划

schema在心理学中用于描述一种有组织的思想或行为模式,该思想或行为组织了信息的类别及其之间的关系

在设计数据库之前,我们还需要查看信息类别及其之间的关系。在从DBMS内的物理schema开始之前,我们需要创建一个概念性schema

在软件开发中,当讨论schema时,可以讨论概念schema,物理schema,内部schema,外部schema,逻辑schema等。每个都有其特定的含义

DBMS中schema的定义

以下是三个主要数据库系统关于schema的快速定义:

MySQL

从概念上讲,schema是一组相互关联的数据库对象,例如表,列,列的数据类型,索引,外键等

实际上,在MySQL中,schema与database同义。您可以在MySQL SQL语法中用关键字SCHEMA代替DATABASE,例如,使用CREATE SCHEMA代替CREATE DATABASE

SQL Server

表的名称,字段,数据类型以及数据库的主键和外键

Oracle Database

Oracle数据库的schema与其他数据库完全不同。 Oracle的schema与数据库用户密切相关

schema是数据或schema对象的逻辑结构的集合。schema归数据库用户所有,并且与该用户同名。每个用户都拥有一个schema

有关DBMS的schema定义,本文提供了更多详细信息

Creating Schemas

尽管schema在定义方面存在差异,但上述三个DBMS均支持CREATE SCHEMA语句

MySQL

在MySQL中,CREATE SCHEMA就是创建了一个数据库

这是因为CREATE SCHEMA是CREATE DATABASE的同义词。换句话说,您可以使用CREATE SCHEMA或CREATEDATABASE执行相同的操作

Oracle Database

在Oracle数据库中,CREATE SCHEMA语句实际上并未创建schema。这是因为已经为每个数据库用户创建了一个schema

在Oracle中,CREATE USER语句就是创建schema

在Oracle中,CREATE SCHEMA语句使您可以将表和视图包含在schema中并授予这些对象的特权,而不必在多个事务中发出多个SQL语句

SQL Server

在SQL Server中,CREATE SCHEMA将通过您提供的名称来创建schema

与MySQL不同的是,CREATE SCHEMA语句单独创建了一个定义到数据库的schema

与Oracle不同的是,CREATE SCHEMA语句实际上创建了schema

在SQL Server中,一旦创建了schema,便可以向其中添加用户和对象

结论

schema可以在许多不同的上下文中使用。在特定数据库管理系统中,您需要使用其DBMS定义schema的方式

并且当您切换到新的DBMS时,请一定搞清楚该系统如何定义schema。