一、SQL标准对schema如何定义?
ISO/IEC 9075-1 SQL标准中将schema定义为描述符的持久命名集合(a persistent, named collection of descriptors)。
大部分的网上资料定义Schema如下:
schema是用来组织和管理数据的一种方式。它定义了数据库中的各种对象,如表、视图、索引等,以及它们之间的关系。schema可以看作是数据库的蓝图,它规定了数据的结构和组织方式,使得数据能够被有效地存储和检索。
听者有心说者却没有说清,所以造成很多时候都是吵来吵去,最后找答案的朋友也是一头雾水。
二、到底怎么理解合适呢?
我觉得这么理解可能更容易一些。
1、首先把Schema当做一个集合
Schema是指数据库对象的集合,包括表、视图、索引、存储过程、函数等。Schema是数据库中的逻辑结构,它定义了数据库中的所有对象及其之间的关系。
相当于一个大的描述文件,可以理解为一个xml文件,其格式简单描述如下:
<schema>
<table name="Albums">
<field resultkey="true">
<field>
</table>
<table name="Genre">
<field resultkey="true">
<field>
</table>
<table name="Artists">
<field>
<field>
</table>
</schema>
也就是说schema是对一些表、列、视图、索引等的描述,可以理解为就是对下图结构的描述。
2、其次schema就是个标识
我们把schema就当做一个标识就好了,相当于一个逻辑标识,一个数据库里面可能有多个schema,我用下图圈一下,然后再描述一下。
每个圈里面看做一个schema,那么这个database就有两个schema了。那描述可以如下:
<schema name="schema1">
<table name="film">
<field resultkey="true">
<field>
</table>
<table name="language">
<field resultkey="true">
<field>
</table>
<table name="actor">
<field>
<field>
</table>
</schema>
<schema name="schema2">
<table name="film">
<field resultkey="true">
<field>
</table>
<table name="inventory">
<field resultkey="true">
<field>
</table>
<table name="film_tex">
<field>
<field>
</table>
</schema>
通过上面的说明是不是大概了解了。schema是一种逻辑组织方式,用来更好的描述数据关系以及进行权限控制。
三、Schema的作用
数据组织和结构化:schema定义了数据的结构,使得数据能够按照一定的方式进行组织和存储。它规定了表和列的名称、类型和约束,使得数据能够被正确地存储和检索。
数据一致性和完整性:schema可以定义数据的约束条件,如主键、外键、唯一性约束等,以确保数据的一致性和完整性。通过定义约束,schema可以限制数据的取值范围,防止不符合要求的数据被插入或更新。
数据安全性:schema可以定义访问权限和安全策略,控制用户对数据库中数据的访问和操作。通过定义权限和角色,schema可以限制用户的操作范围,保护数据的安全性。
Schema通常用于授权和访问控制,可以为不同的用户或角色分配不同的Schema权限,从而实现对数据库对象的安全控制。在一些数据库管理系统中,Schema也可以用于分离不同的业务逻辑或应用程序,以便更好地管理和维护数据库。
四、Schema的类型
在数据库中,可以存在多个schema,每个schema可以包含多个表和其他对象。不同的数据库管理系统支持不同的schema类型(这也是我们后面要说的),常见的有:
单一schema:所有的表和对象都位于同一个schema中。这是最简单的schema类型,适用于小型数据库或简单的应用程序。
多个schema:数据库中可以创建多个独立的schema,每个schema包含一组相关的表和对象。这种方式可以更好地组织和管理数据,提高数据库的可维护性和扩展性。
五、不同数据库中的Schema
不同数据库管理系统中的Schema虽然相差不大,但也有一些差异,描述如下:
1、MySQL
MySQL官方文档指出,从概念上讲,Schema是一组相互关联的数据库对象,如表,表列,列的数据类型,索引,外键等等。但是从物理层面上来说,Schema与数据库是同义的。你可以在MySQL的SQL语法中用关键字SCHEMA替代DATABASE,例如使用CREATE SCHEMA来代替CREATE DATABASE。在MySQL中基本认为schema和数据库相同,也就是说schema的名称和数据库的实例的名称相同,一个数据库有一个schema。
2、SQL Server
SQL Server官方文档指出,schema中包含了数据库的表,字段,数据类型以及主键和外键的名称。
3、Oracle
Oracle中的schema系统与其他数据库系统大不相同,Oracle的schema与数据库用户密切相关。Oracle官方文档指出,schema是数据或模式对象的逻辑结构的集合,由数据库用户拥有,并且与该用户具有相同的名称,也就是说每个用户拥有一个独立的schema。
4、PostgreSQL
在PostgreSQL中,可以创建一个数据库,然后在数据库中,创建不同的schema,每个schema又有着一些各自的表,索引等。
参考资料:
https://blog.csdn.net/xiaokanfuchen86/article/details/113052362
https://www.jianshu.com/p/3ff42cb84f3e
https://blog.csdn.net/hpulfc/article/details/79564790
https://cloud.tencent.com/developer/article/2084855
https://www.jianshu.com/p/3ff42cb84f3e
https://zhidao.baidu.com/question/635700125562783284.html
https://cloud.tencent.com/developer/article/2084855