模式、表和数据库之间的区别是什么?

这可能是一个非常糟糕的问题。但我一直将模式视为数据库中的表定义。这是错误的或不完全正确的。我不太记得我的数据库课程了。

278508 次浏览

模式→平面图

数据库→房子

表格→房间

简而言之,模式是整个数据库的定义,因此它包括表、视图、存储过程、索引、主键和外键等。

关系模式是表的逻辑定义——它定义了表的名称,以及每一列的名称和类型。就像一个计划或蓝图。数据库模式是整个数据库的关系模式的集合。

表格是一个有一堆行(又名“元组”)的结构,每一行都有由模式定义的属性。表上还可能有索引,以帮助查找某些列上的值。

数据库在形式上是任何数据的集合。在这个上下文中,数据库将是表的集合。数据库管理系统(数据库管理系统)是管理和运行数据库的软件(如MySQL, SQL Server, Oracle等)。

这篇文章只涉及到Oracle, Schema的定义在另一个DB上下文中会发生变化。

可能是那种让人受不了的事情,但供你参考的术语似乎在定义上有所不同,这是最烦人的事情:)

在Oracle中,数据库就是数据库。你可以把它想象成数据文件和重做日志,以及数据库本身在磁盘上的实际物理存在(即不是实例)。

Schema实际上就是一个用户。更具体地说,它是用户拥有的一组表/ pros /索引等。另一个用户有不同的模式(他/她拥有的表),但是用户也可以看到他们有选择特权的任何模式。因此,一个数据库可以由数百个模式组成,每个模式由数百个表组成。您可以在同一数据库中的不同模式中拥有具有相同名称的表。

表是一个表,一组包含数据的行和列,并且包含在模式中。

例如,SQL Server中的定义可能不同。我不知道这件事。

更多关于模式的信息:

在SQL 2005中,模式是对对象进行分组的一种方式。它是一个容器,你可以把对象放进去。人们可以拥有这个物品。您可以授予模式上的权限。

在2000年,一个模式相当于一个用户。现在它已经摆脱了束缚,变得相当有用。你可以把你所有的用户过程放在一个模式中,把你的管理过程放在另一个模式中。将EXECUTE授予适当的用户/角色,就完成了对特定过程的EXECUTE授权。好了。

点表示法是这样的:

Server.Database.Schema.Object

myserver01.Adventureworks.Accounting.Beans

在oracle中,Schema是一个数据库下的一个用户,例如scott是数据库orcl中的一个Schema。 在一个数据库中,我们可能有很多模式,比如scott

schema包含数据库。

数据库是Schema的一部分。

schema >数据库。

模式包含视图、存储过程、数据库、触发器等。

Schema的行为就像在OOP中看到的父对象一样。所以它本身不是一个数据库。也许这个链接是有用的。

但是,在MySQL中,这两者是等价的。关键字DATABASE或DATABASES 可以在任何出现的地方替换为SCHEMA或SCHEMAS。例子:< / p >
  • 创建数据库
  • 显示数据库<=>

MySQL文档

模式,数据库术语是依赖于DBMS的。

表格是一组数据元素(值),使用垂直列(由它们的名称标识)和水平行模型组织。数据库通常包含一个或多个。你把数据存储在这些表中。这些表可能彼此相关(在这里看到的)。

Schema是数据库对象的集合,其中也包含逻辑结构。 它具有拥有它的用户的名称。 database可以有任意数量的Schema。 数据库中的一个表可以出现在两个同名的不同模式中。

.用户可以查看被赋予选择权限的任何模式

模式不是整个数据库的计划。它是一个计划/容器,用于数据库中对象的子集(例如。tables)。

这就是说你可以有多个对象(ex。表)在一个数据库中,它们不一定属于同一功能类别。因此,您可以在不同的模式下对它们进行分组,并赋予它们不同的用户访问权限。

也就是说,我不确定是否可以在多个模式下有一个表。Management Studio UI提供了一个下拉菜单,将模式分配给表,因此可以只选择一个模式。我猜如果使用TSQL,它可能会用不同的对象id创建2个(或多个)不同的对象。

数据库模式是一种逻辑分组对象的方法,如表、视图、存储过程等。把模式看作是对象的容器。 表是行和列的集合。 所有表的组合生成一个db.

就像MusiGenesis说的那样,在大多数数据库中:

架构:数据库:表::平面图:房子:房间

但是,在Oracle中,它可能更容易想到:

架构:数据库:表::所有者:房子:房间

与上面的一些答案相反,以下是我对他们每个人的经验的理解:

  • MySQL: database/schema :: table
  • SQL Server: database :: (schema/namespace ::) table
  • Oracle: database/schema/user :: (tablespace ::) table

请纠正我关于表空间是否是可选的Oracle,这是很长一段时间以来,我记得使用他们。

PostgreSQL的文档:

一个数据库包含一个或多个命名模式,这些模式又包含表。模式还包含其他类型的命名对象,包括数据类型、函数和操作符。相同的对象名可以在不同的模式中使用而不会发生冲突;例如,schema1myschema都可以包含名为mytable的表。与数据库不同,模式不是严格分离的:用户可以访问他所连接的数据库中任何模式中的对象,如果他有权限这样做的话。

为什么要使用模式有以下几个原因:

  • 允许多个用户使用一个数据库而互不干扰。

  • 将数据库对象组织成逻辑组,使其更易于管理。

  • 第三方应用程序可以放在单独的模式中,这样它们就不会与其他对象的名称冲突。

模式类似于操作系统级别的目录,只是模式不能嵌套。

enter image description here

根据https://www.informit.com/articles/article.aspx?p=30669

所有对象的名称在一定范围内必须是唯一的。每一个 数据库必须有唯一的名称;模式名称不能重复 在单个数据库的范围内,表的名称必须为 在单个模式的作用域中是唯一的,列名必须是 在表中是唯一的。类中索引的名称必须唯一 数据库。< / p >

我试着根据我对以下类比的理解来回答:

  • A 数据库就像房子
  • 在这所房子里有几种类型的房间。假设你住在一个非常大的房子里。你肯定不希望你的客厅、卧室、浴室、夹层、树屋等看起来都一样。他们每个人都需要一个蓝图来告诉他们如何建造/使用它们。换句话说,它们每个都需要模式来告诉如何建造/使用浴室。
  • 当然,你可能有几间卧室,每一间看起来都略有不同。你和你妻子/丈夫的卧室与你孩子的卧室略有不同。每个卧室都类似于数据库中的表格
  • 数据库管理系统就像房子里的管家。他管理着所有的事情。