数据库中的Schema到底是什么
参考:http://database.guide/what-is-a-database-schema/
在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式。模式中包含了schema对象,可以是表(table)、列(column)、数据类型(data type)、视图(view)、存储过程(stored procedures)、关系(relationships)、主键(primary key)、外键(foreign key)等。数据库模式可以用一个可视化的图来表示,它显示了数据库对象及其相互之间的关系
以上是模式图的一个简单例子,显示了三个表及其数据类型、表之间的关系以及主键和外键,以下是数据库模式的一个更复杂的例子。
在这种情况下,模式图分为四个部分:
(1)Customer Data(客户数据):与客户有关的数据,如姓名,地址等
(2)Business(业务):业务所需的数据,例如员工,商店位置,付款细节等
(3)Inventory(库存):所有产品的细节。在这里,产品是电影,所以它包含电影标题,类别,演员等数据。
(4)Views(视图):关于用于评估的数据的特别观点,所以通过这些模式图,我们可以进一步创建一个数据库,实际上,MySQL Workbench允许我们直接从图中生成一个Create Table
脚本,然后我们就可以直接用这个脚本去创建一个数据库,还可以直接将一个数据库转换为一个关系图表。
Schema和DataBase是否等同?
涉及到数据库的模式有很多疑惑,问题经常出现在模式和数据库之间是否有区别,如果有,区别在哪里。
取决于数据库供应商
对schema(模式)产生疑惑的一部分原因是数据库系统倾向于以自己的方式处理模式
(1)MySQL的文档中指出,在物理上,模式与数据库是同义的,所以,模式和数据库是一回事。
(2)但是,Oracle的文档却指出,某些对象可以存储在数据库中,但不能存储在schema中。 因此,模式和数据库不是一回事。
(3)而根据这篇SQL Server技术文章SQLServer technical article,schema是数据库SQL Server内部的一个独立的实体。 所以,他们也不是一回事。
因此,取决于您使用的RDBMS,模式和数据库可能不一样。
SQL标准对schema如何定义?
ISO/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 keyword
SCHEMA
instead ofDATABASE
in MySQL SQL syntax, for example usingCREATE SCHEMA
instead ofCREATE 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 SCHEMA
是CREATE 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到底是什么的更多相关文章
- 数据库中的Schema是什么?
在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文叫模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式.模式中包含了schema对象 ...
- 数据库中的schema概念
原文地址:http://blog.sina.com.cn/s/blog_7952e89001010jlj.html 数据库的初学者往往会对关系型数据库模式(schema).数据库(database). ...
- 数据库中Schema和Database有什么区别
在MySQL中创建一个Schema好像就跟创建一个Database是一样的效果,在SQL Server和Orcal数据库中好像又不一样. 目前我只能理解,在mysql中 schema<==> ...
- 数据库中User和Schema的关系
如果我们想了解数据库中的User和Schema到底什么关系,那么让我们首先来了解一下数据库中User和Schema到底是什么概念. 在SQL Server2000中,由于架构的原因,Us ...
- 数据库中table 和 schema的区别
什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User? 我们可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个 ...
- 数据库中Schema(模式)概念的理解
在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等.为了区分不同的集合,就需要给不同的集合起不 ...
- 数据库中Schema、Database、User、Table的关系[转]
数据库的初学者往往会对关系型数据库模式(schema).数据库(database).表(table).用户(user)之间感到迷惘,总感觉他们的关系千丝万缕,但又不知道他们的联系和区别在哪里,对一些问 ...
- 数据库中存储日期的字段类型到底应该用varchar还是datetime
将数据库中存储时间的数据类型改为varchar(),这时最好让这些时间是数据库中自动生成的(一个没有格式的输入也可能会导致输出错误),因为存储类型为varchar(),所以获取到的值也就被认为是一个字 ...
- [转]数据库中Schema(模式)概念的理解
在学习数据库时,会遇到一个让人迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等. 如果把database看作是一个仓库,仓库很多 ...
随机推荐
- 【原生JS插件】LoadingBar页面顶部加载进度条
先展示一下已经实现的效果: 预览地址:http://dtdxrk.github.io/js-plug/LoadingBar/index.html 看到手机上的浏览器内置了页面的加载进度条,想用在pc上 ...
- js删除json指定元素
var obj = {‘id’:1, ‘name’:‘张三’}; delete obj.id; // 或者 delete obj[id];
- mysql explain中key_len的作用
mysql explain中key_len的作用key_len越小 索引效果越好 name的字段类型是varchar(20),字符编码是utf8,一个字符占用3个字节,那么key_len应该是 20* ...
- TypeScript(二)使用Webpack搭建环境
今天继续来更新,本篇文章我们讲环境搭建,主要分享一些环境搭建的学习资源及安装步骤,解决一些安装时可能会出现的问题.下面就让我们一起进入学习第一步,搭建TypeScript环境:一. 环境搭建1.1. ...
- Linux下操作数据库
一.安装数据库 1.卸载旧版本 检查是否安装有MySQL Server:rpm -qa | grep mysql rpm -e mysql_libs //普通删除模式 rpm -e --nod ...
- Meerkat软件
一.准备工作 meerkat 0.189版本和以前的版本相比,支持bwa mem 输出的bam文件,还支持全外显子数据count SV. meerkat原理 1.1 需要准备的软件 unix/Linu ...
- gitlab 重置密码
sudo gitlab-rails console production --------------------------------------------------------------- ...
- pytorch1.0实现RNN for Regression
import torch from torch import nn import numpy as np import matplotlib.pyplot as plt # 超参数 # Hyper P ...
- [转帖]进程上下文频繁切换导致load average过高
进程上下文频繁切换导致load average过高 2016年6月26日admin发表评论阅读评论 http://www.361way.com/linux-context-switch/5131.ht ...
- SSM整合-配置文件
使用工具:maven.idea.jdk8.mysql.tomcat9.0 初学ssm框架,配置文件的配置目录: 其中genera ...