·

数据库中的Schema是什么?

发布时间:2024-08-18 00:31:51阅读量:262
转载请注明来源

在数据库中,schema( [ˈskimə],发音 “skee-muh” 或者“skee-mah”,(计划或理论的)提要,纲要;网络模式;图式;架构。中文叫模式)是数据库的组织和结构schemasschemata都可以作为复数形式。模式中包含了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 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是什么?_我是蚁人的博客-CSDN博客_schema

英文原文转换语言可见。

0 人喜欢

评论区

暂无评论,来发布第一条评论吧!

弦圈热门内容

一文读懂量子计算:现已进入“实用阶段”,“量子时代”即将到来

划重点:量子计算首次出现于20世纪80年代初,主要依靠量子力学来解决复杂的、以前不太可能解决的计算问题。IBM于2019年推出了首个IBM Q System One量子计算系统,谷歌也声称其实现了“量子霸权”。尽管量子计算行业的实际同比增长率仅为1%,但该领域初创企业2022年获得的总投资达到23.5亿美元。多数首席信息官和IT领袖认为量子计算并未被过分炒作,他们希望更多地关注这项技术,以了解即将到来的颠覆。十年内具有主动纠错功能的大型量子计算机有望诞生,21世纪也将因此被视为“量子时代”。腾讯科技讯 量子计算是一个新兴的科学领域,由于它在许多行业拥有着巨大的应用潜力,已经引起了许多国家和公司的兴趣。随着更多资源和资金的投入,量子计算技术正以极快的速度向前飞跃。有科学家预言,量子计算机正进入“实用”阶段,十年内具有主动纠错功能的大型量子计算机有望诞生,“量子时代的黎明”即将到来。01 量子计算将成改变人类历史进程的新里程碑量子计算这种变革性技术虽然仍处于起步阶段,但它将成为改变全球技术进程的科学趋势之一。量子计算首次出现于20世纪80年代初,是一种变革性的技术趋势,旨在通过快速有效地解 ...

理论深度高的数学分支(如代数几何,代数拓扑)的新一代一流数学家(如恽之玮)做研究之前一般学了多久呀?

知乎提问:感觉所需的预备知识太多,代数几何和代数数论目前只学了半年多一点。要不是我不够聪明,要不是从事这些方向的研究的预备学习时间过高。Peter Scholze倒16岁就能搞明白不少费马大定理的证明,估计他当时的学习速度比我现在的高好几倍。因此,我在学习这些过程中稍微产生了点消极感。我的回答(已删):扯淡,又在这里造谣,都说过了不要神化Peter Scholze,这是对人家的羞辱。建议看看我之前的回答,里面已经把具体的情况解释得很清楚了。求证:关于菲尔兹奖得主舒尔茨的这个非常特殊的说法,是否属实?Peter Scholze确实16岁的时候看费马大定理的证明了,但他什么都看不懂。在我看来,文献看不懂没关系,最重要的是你看不懂还能继续看下去,发现motivation,这最考验一个人的数学成熟度。数学家在做一个问题的时候,也不是全部知识都懂的,往往都是一边做问题一边学的,需要什么就学什么,这样才是效率最高的。我其实不是很明白为什么总要比多少岁看什么什么,好像这真的能完全反应一个人数学的科研能力、创造能力一样。不同的数学家风格截然不同,数学发展的路径也完全不同,很多都是非线性的。只能说有的大 ...

🇩🇪12.25 科隆

专门奔着科隆大教堂来的,只为一睹比圣家堂还牛逼,盖了600多年才交楼的烂尾楼。在里面休息的时候发现游客突然都不见了,然后发现刚好被困在了弥撒时间,来都来了于是硬着头皮速成天主教徒()管风琴的悠扬,唱诗班的吟唱,加上科隆大教堂内部本身就高大宽敞,现场气氛顿时圣洁了起来,亲身体验过真的非常震撼人心。下面的信徒们也纷纷起立捧着唱词本跟着吟唱,我只能强行跟着站起来aiueo了几句然后划十字阿门(毕生所学)神父念念有词了十来分钟只听懂了哈利路亚(悲)本来还想跟完事去讨块圣体尝尝,不知道为什么这次没有领用圣体的环节。不过也算是达成成就参加了一场天主教法事,还是在大名鼎鼎的科隆大教堂()

怎么学好代数结构?

知乎提问:怎么学好代数结构?我的回答(已删):其实抽象代数确实不太好学,抽象代数顾名思义很抽象。我刚开始学抽象代数的时候,也啃得非常吃力。对此,我建议先坚持学下去,不要停,实在不懂的话先跳过,因为后面的内容说不定能帮助你前面内容的理解。在学习的过程中,多积累一些trivial的例子,不需要太复杂的例子。学习是一个积累的过程,尤其是数学,不应心态过于急躁,对于自己弄不懂的概念要多次仔细揣摩,第一次不行就隔段时间再来一次,多学几遍是没有错的,同时可以尝试看多几本抽象代数的书,看看是不是因为不适合自己口味所以觉得很吃力,找到一本最合自己胃口的书。我个人觉得吧,抽象代数其实也只是非常基础的课程,只要有足够的时间,坚持下去,总能弄懂学会的。加油!原文发布于 2020-08-15 22:492020年8月,应该是高三高考完的那段时间,那个时间也是我数学水平、数学知识飞速提升的时间段,但我也遇到了更多的挑战。大一的时候,我一边想做望月新一的远阿贝尔几何,一边也想做Peter Scholze的算术几何。最后在导师的建议下,我选择了专注做Peter Scholze的算术几何。这个时间段,导师对我来说还是 ...

学习成绩差是一种罪吗?

知乎提问:学习成绩差是一种罪吗?我的回答(已删):能问出这种问题,证明如今社会上很多人被这种唯分数论洗脑的太严重了。学习成绩差怎么了,得罪谁了?学习成绩差本身没啥大不了的,但在zg的教育体制下,却有学习成绩差=坏孩子这种荒谬的事情。就好像在如今社会躺平就会被骂懒惰、不进取,被披上各种不友好的标签。这些都只不过是资本主义社会的产物,因为你懒惰不工作,就不能使资本发生增值,然后资本家就会跳出来给人们洗脑说这样做是不对的。况且学习成绩也跟一个人的实力没必然关系。就数学而言,数学成绩多少跟你数学的研究水平没有半毛钱关系。今年的fields奖得主Hub据说连Gre考试都做不完卷子,反应很慢,学习成绩很差,但这不影响他拿fields奖。本来考试这东西就是在有限的时间内考你教材里的内容,跟创新能力啥没有一点关系。原文发布于 2022-10-21 22:152022年当时应该大二吧,当时的菲尔兹奖得主对我还是挺鼓舞的,可以说是进一步鼓舞了我。之前我一直拿Witten、Bott等半路出家人的事例鼓舞自己,因为我就一普通得不能再普通的学生,在社会上毫无任何优势,唯一的优势或许就是早了解了那么点数学吧。

数学中的「分析」是什么意思?

知乎提问:数学中许多分支名字中带有「分析」二字,如数学分析、实分析、复分析、泛函分析、调和分析、数值分析……牠们的共同点是什么(也就是,「分析」二字是什么意思)?我的回答(原文已删):我感觉分析有研究某个数学对象局部性质的意思。比如说,几何分析就是通过PDE将流形上的局部性质跟整体的拓扑性质联系起来。又比如说,任意形式的波都可以分解成傅立叶级数的形式。这些都是研究局部性质的例子吧。我不是做分析的,这只是我的粗浅理解。。原文发布于 2021-05-24 18:48我看回知乎曾经的回答,我发现2021年前的时间,回答都普遍比较简单。2021年,那时候我应该刚读大一吧,没怎么写过notes,更别提后面写多篇论文了,因此写作能力一般,也懒得长篇大论。

学高数有什么技巧么?

知乎提问:学高数有什么技巧么?我的回答(已删):学高等数学首先不能去想需要什么技巧,因为学高等数学最需要的是你对其的理解,技巧什么的其实是次要的。因为,理解决定了你数学的高度,如果你遇到某些概念理解不了的话,靠技巧是解决不了的。技巧大多是应用于证明上面的。想要对数学有足够深入的理解,在多看书的同时,对于同一样东西需要反复揣摩,反复与其它相关的概念对比,正如Grothendieck所说,通过构建不同数学对象之间的联系来理解数学。当你通过多次反复学习,对数学的理解到了足够高的程度,其实很多东西就变得trivial了,也并不需要太多的技巧。当然技巧还是有一些的,比如对于一些抽象的概念多看一些例子帮助理解;如果遇到某些东西理解不了,想了很久还是没有想到,可以先跳过,过段时间再去想;可以适当做些习题,但不需要做太多重复的题目,etc.原文发布于 2020-08-15 22:31这又是一篇高考后写的回答,甚是感慨。说实话那个时间段写的回答,比我现在写的会更加真实,也更加有效果,因为那个时间段我就是初学阶段。不像我现在早已过了初学阶段,进入Research做数学的阶段,过去的一些做法和细节已经遗忘了 ...

求证:关于菲尔兹奖得主舒尔茨的这个非常特殊的说法,是否属实?

知乎提问:这是我在一篇自媒体文章里看到的关于舒尔茨的学习、科研方式的说法:令人非常吃惊的是,舒尔茨对代数几何产生兴趣竟然是因为看了怀尔斯关于费马大定理的证明。与常人不同的是,舒尔茨几乎不会花时间去学基础知识,比如线性代数,抽象代数这种,他都是直接去看一些论文,当遇到一些不懂的问题时,才会去查阅相关资料,并且他还可以立即学会这些知识,例如他通过研究费马大定理的证明,学会了模形式和椭圆曲线的相关知识。这个说法和我以前理解的学习、科研方式大相径庭,所以我觉得有必要来求证一下是否属实。谢谢!我的回答(已删):你看到的这个中文翻译的采访非常有问题,严重歪曲了Peter Scholze的真实情况。首先这个采访原文的地址是The Oracle of Arithmetic | Quanta Magazine。原文中说到Peter Scholze中学的时候得知Wiles证明了费马大定理,因此去看费马大定理的证明,结果是understood nothing!At 16, Scholze learned that a decade earlier Andrew Wiles had proved the fa ...

读基础数学如何解决经济问题?

知乎提问:读基础数学如何解决经济问题?我的回答(已删):读基础数学还想着赚钱干嘛,想赚钱就别读纯数了。因为如果想赚钱,这难度系数指数级上升,你做纯数可能做得已经很不错了还不如那些IT行业人士赚个月入过万。因此,如果你想靠纯数赚钱,你会觉得很不公平,而且在这浮躁的社会环境里,你怀着这种心态也很难沉得下心来做研究。对于经济问题,正如刘宇航前辈所说,降低需求是最好的办法。原文发布于 2021-05-24 19:06下面引用一下lyh的回答,话说我以前刚开始学数学的时候,知乎还是挺多数学大佬的,这种是真的专业的,不像现在一些数学大v压根没啥数学水平。目前来看,绝大多数数学大v都退乎了,有不少还注销账号了,回答一个也没留下来。lyh算是少数几个还坚持在知乎发言,并且还是持续性更新的,别的哪怕还留在知乎基本也很少发言了。

想做朗兰兹纲领方向,请问如何安排学习进度?

知乎提问:最近对朗兰兹纲领感兴趣,主要是向往大一统的理论,但因为这个领域很庞大,不知道从哪里入手,希望能提供学习顺序,推荐一些书目,越详细越好。另外,想知道哪些院校这方面做的比较好我的回答(已删):我并不是做Langlands programs方向的,但是也对其有所兴趣,因为算术几何跟Langlands programs也有所联系。个人觉得可以从Shimura varieties作为学习的切入点,具体的references可以看Milne的note,直接百度就有了。同时,可以看看欧阳毅的Galois representation,Scholze关于local Langlands的文章,还有Harris和Taylor的The Geometry and Cohomology of Some Simple Shimura Varieties。在看的过程中,看不懂就往下补知识,并且不要忘记了解相应知识的诞生背景,这样做效率是最高的。不过,这些东西都特别难读,反正我也很多看不懂,还是找个该方向的专家带最好。原文编辑于 2022-05-02 22:30原文评论区Milne的course notes ...