首页 > 数据库 >[转]SQL标准对schema如何定义?(不同数据库中schema模式的意义)

[转]SQL标准对schema如何定义?(不同数据库中schema模式的意义)

时间:2022-10-10 15:04:47浏览次数:72  
标签:数据库 SQL MySQL schema CREATE SCHEMA

原文地址:SQL标准对schema如何定义? - 知乎 (zhihu.com)

SO/IEC 9075-1 SQL标准中将schema定义为描述符的持久命名集合(a persistent, named collection of descriptors),如果你之前对schema的定义疑惑不解,希望看了我的这篇文章会好一些,起码不会更差。

广义上

造成疑惑的另一个原因可能是由于schema这一术语具有如此广泛的含义,因为它在不同的环境下有不同的含义,schema一词源于希腊语skhēma,意思是形态(form),轮廓(figure),形状(shape)或方案(plan)。Schema在心理学中被用来描述组织信息类别及其之间关系的有组织的思维或行为模式。我们在设计一个数据库之前,还需要看看数据中的信息种类和它们之间的关系, 在我们开始使用DBMS中的物理模式之前,我们需要创建一个概念模式。在软件开发中讨论模式时,可以讨论概念模式、物理模式、内部模式、外部模式、逻辑模式等,每一个都有其特定的含义。

DBMS的schema定义

以下是三个领先的关系数据库系统的schema定义:

MySQL

Conceptually, a schema is a set of interrelated database objects, such as tables, table columns, data types of the columns, indexes, foreign keys, and so on. These objects are connected through SQL syntax, because the columns make up the tables, the foreign keys refer to tables and columns, and so on. Ideally, they are also connected logically, working together as part of a unified application or flexible framework. For example, theINFORMATION_SCHEMA and performance_schema databases use “schema” in their names to emphasize the close relationships between the tables and columns they contain.
In MySQL, physically, aschema is synonymous with adatabase. You can substitute the keywordSCHEMA instead ofDATABASE in MySQL SQL syntax, for example using CREATE SCHEMA instead of CREATE DATABASE.
Some other database products draw a distinction. For example, in the Oracle Database product, aschema represents only a part of a database: the tables and other objects owned by a single user.

MySQL官方文档指出,从概念上讲,模式是一组相互关联的数据库对象,如表,表列,列的数据类型,索引,外键等等。但是从物理层面上来说,模式与数据库是同义的。你可以在MySQL的SQL语法中用关键字SCHEMA替代DATABASE,例如使用CREATE SCHEMA来代替CREATE DATABASE

参考: MySQL Glossary, MySQL 5.7 参考手册. MySQL, Retrieved 6 June 2016。

SQL Server

The names of tables, fields, data types, and primary and foreign keys of a database.

SQL Server官方文档指出,schema中包含了数据库的表,字段,数据类型以及主键和外键的名称。参考:SQL Server Glossary. SQL Server 2016 Technical Documentation. Microsoft Developer Network. Retrieved 6 June 2016.

Oracle Database

Oracle中的schema系统与其他数据库系统大不相同,Oracle的schema与数据库用户密切相关。

A schema is a collection of logical structures of data, or schema objects. A schema is owned by a database user and has the same name as that user. Each user owns a single schema.

Oracle官方文档指出,schema是数据或模式对象的逻辑结构的集合,由数据库用户拥有,并且与该用户具有相同的名称,也就是说每个用户拥有一个独立的schema。

参考: Oracle Database Objects. Oracle Database Online Documentation 12c Release 1 (12.1). Oracle Help Center. Retrieved 6 June 2016.

如果想了解更多关于schema的内容,可以参考这篇文章schema definitions by DBMS.

创建Schema

尽管上述三个DBMS在定义schema方面有所不同,还是有一个共同点,就是每一个都支持CREATE SCHEMA语句。

MySQL

在MySQL中,CREATE SCHEMA创建了一个数据库,这是因为CREATE SCHEMACREATE DATABASE的同义词。 换句话说,你可以使用CREATE SCHEMA或者CREATE DATABASE来创建一个数据库。

Oracle Database

在Oracle中,CREATE SCHEMA语句实际上并不创建一个模式,这是因为已经为在创建用户时,数据库用户就已经创建了一个模式,也就是说在ORACLE中CREATE USER就创建了一个schema,CREATE SCHEMA语句允许你将schema同表和视图关联起来,并在这些对象上授权,从而不必在多个事务中发出多个SQL语句。

SQL Server

在SQL Server中,CREATE SCHEMA将按照名称创建一个模式,与MySQL不同,CREATE SCHEMA语句创建了一个单独定义到数据库的模式。和ORACLE也不同,CREATE SCHEMA语句实际创建了一个模式(前面说到这个语句在ORACLE中不创建一个模式),在SQL Server中,一旦创建了模式,就可以往模式中添加用户和对象。

总结

schema这个词可以用在很多不同的环境中,在特定数据库管理系统创建一个schema时,您需要使用DBMS特定定义模式,当你切换到一个新的数据库管理系统时,一定要查看该系统是如何定义schema的。

 

其他相关资料:如何理解数据库的Schema模式 – 标点符 (biaodianfu.com)

数据库中的Schema是什么?-阿里云开发者社区 (aliyun.com)

数据库中Schema(模式)概念的理解 - unique1319 - 博客园 (cnblogs.com)

标签:数据库,SQL,MySQL,schema,CREATE,SCHEMA
From: https://www.cnblogs.com/dirgo/p/16775706.html

相关文章

  • 空值、NULL的对比(tdsqlVSPG)
    NULL值的对比PG\mysql中空字符串与null是不同的;而oracle中,空字符串与null等同。NULL和''ORACLE认为''等同于NULL,'a'||null结果是'a'NULL和''不同,'a'||null结......
  • MySQL中常见的约束(Constraints)
    0.约束的概念SQL约束用于规定表中的数据规则,如果存在违反约束的数据行为,行为会被约束终止。1.主键约束PRIMARYKEY约束唯一标识数据库表中的每条记录。要求必须包含唯......
  • SQL操作:WITH表达式及其应用
    SQL标准1999中,在传统SQL语法的基础上增加了with表达式的使用,使得SQL语句的编程可以更加灵活和具备可扩展性。本文将围绕with,以及更高阶的withrecursive表达式介绍其语法特......
  • mysql8.0 用户授权
    createuser'user-xxx'@'%'identifiedby'passworddddd';grantallprivilegeson*.*to'user-xxx'@'%'withgrantoption;ALTERUSER'user-xxx'@'localhost'ID......
  • MySQL练习题
    1,取得每个部门最高薪水的人员名称:1,先按照部门分组并求出每个部门的最大值,以及获取最大值的部门编号。作为临时表2,通过joinon连接两个表,使用子表中的部门编号和......
  • 1、Linux下源码编译安装PostgreSQL
    操作系统:Centos7说明:postgresql必须在postgres用户下初始化数据库和启动,否则报错。PostgreSQL的特性PostgreSQL是一种几乎可以运行在各种平台上的免费的开放源码的对象关系......
  • idea连接mysql数据库报错
      原因:版本的问题我安装的mysql版本高,但是驱动的版本低,所以就不行了,那就换个版本,我用了最新的版本,好了   ......
  • mysql 5.1.73 binlog测试以及全量备份恢复测试
       甲方提出业务服务器的mysql日志要本地备份或者上传日志服务器,以及要具备回滚、恢复功能。问了度娘后,同甲方商量、建议,保存binlog日志30天且每月全量备份一次。 ......
  • 38、mysql数据库(pymysql及事务)
    38.1、python之pymysql模块:1、说明:pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同。2、模块安装:pipinstallpymysql3、在pycharm中添加pymysql模块:File......
  • 36、mysql数据库(dml)
    36.1、表记录的增删改:1、增加表记录:insert[into]tab_name(field1,filed2,.......)values(value1,value2,.......);(1)创建一张表:createtableemployee_new(idintprimaryk......