什么是Database Schema
翻译自:https://database.guide/what-is-a-database-schema/
用数据库术语来说,schema(读作“ skee-muh”或“ skee-mah”)是数据库的组织和结构。schemas和schemata都可以用作其复数形式
schema包含的对象可以是表,列,数据类型,视图,存储过程,关系,主键,外键等。
A database schema可以用可视化的图表表示,下面的图表显示了数据库对象及其相互之间的关系。
上面是一个架构图的简单示例。它有三个表,以及它们的数据类型,表之间的关系以及它们的主键和外键
这是一个更复杂的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。