模式与表和数据库之间有什么区别?


154

这可能是一个n00blike(或更糟)的问题。但是我一直将模式视为数据库中的表定义。这是错误的或不完全正确。我对数据库课程的记忆不多。


3
在oracle模式中仅指一个用户。也就是说,当我们创建模式将被创建,现在我们可以添加表,视图,索引等包作为一个用户
Ali786

Answers:


242

模式数据库::平面图房子房间


80
有点神秘,但没有错;但是您真的认为自称n00b可以理解吗?
Stein G. Strindhaug

6
打个比方。我将“平面图”更改为“蓝图”,因为该架构不仅仅是表格,而且蓝图包含接线,加热和管道连接。
Paul Tomblin,

4
“模式”实际上只是意味着“计划”。我已经看到它曾经用于引用整个数据库,或者仅引用一个表或视图。
MusiGenesis

@Paul:好点。我最初写的是“蓝图”,但是更改了它,因为它实际上并不意味着“房子”(至少对我而言不是)。
MusiGenesis

4
是的,我倾向于将模式视为Oracle中的用户。因此,每个db的定义甚至不同:D多么令人讨厌。
罗伯特

123

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

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

一个数据库是正式,数据的任何集合。在这种情况下,数据库将是表的集合。一个DBMS(数据库管理系统)是管理和运行一个数据库软件(如MySQL,SQL服务器,Oracle等)。


1
数据库模式还包括索引,视图等
保罗汤布林

1
当然这是不正确的。数据库本身不是表的集合。例如,您可以有30个数据库而没有一个表。
罗伯特

@Robert-拥有没有任何表的数据库的意义是什么?
Paul Tomblin

16
即使您没有任何表,它仍然是表的集合-它是表的空集合
乔恩·斯基特

1
@Ian:请不要忘记,数据库也将具有约束-引用约束(主键,外键),唯一性约束和检查约束。它还可能包括触发器和过程。
乔纳森·莱夫勒

16

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


12

已显示此特定发布仅与Oracle有关,并且在另一个DB的上下文中,Schema的定义也会更改。

可能只是谷歌搜索,但FYI术语的定义确实有所不同,这是最令人讨厌的事情:)

在Oracle中,数据库是数据库。在您的脑海中,您可以将其视为数据文件和重做日志以及数据库本身(而不是实例)磁盘上的实际物理状态。

模式实际上是用户。更具体地说,它是用户拥有的一组表/过程/索引等。另一个用户具有不同的架构(他/她拥有的表),但是该用户还可以看到他们具有选择特权的任何架构。因此,一个数据库可以包含数百个模式,每个模式包含数百个表。您可以在同一数据库中的不同架构中使用具有相同名称的表。

表是表,包含数据的行和列的集合,包含在模式中。

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


11

在OOP世界中,模式的行为看起来像是父对象。因此它本身不是数据库。也许此链接很有用。

但是,在MySQL中,两者是等效的。关键字DATABASE或DATABASES可以用出现的任何地方替换为SCHEMA或SCHEMAS。例子:

  • 创建数据库<=>创建模式
  • 显示数据库<=>显示架构

MySQL文档

SCHEMA和DATABASE术语取决于DBMS。

是一组是使用垂直列和水平行(其可以通过名称来标识)的模型组织的数据元素(值)的。数据库包含一个或多个(通常)。然后将数据存储在这些表中。这些表可能相互关联(请参阅此处)。


有价值的答案
sofs1,19年

2

有关模式的更多信息:

在SQL 2005中,架构是对对象进行分组的一种方式。它是一个可以放入对象的容器。人们可以拥有此对象。您可以授予对模式的权限。

在2000年,架构等同于用户。现在它已经可以自由使用了,非常有用。您可以将所有用户proc置于某个架构中,将admin proc置于另一个架构中。将EXECUTE授予适当的用户/角色,您将可以按照特定的步骤授予EXECUTE权限。真好

点符号将如下所示:

Server.Database.Schema.Object

要么

myserver01.Adventureworks.Accounting.Beans


2

A Schema是数据库对象的集合,其中也包括逻辑结构。它具有拥有它的用户的名称。一个database可以有任意数量架构的的。数据库中的一个表可以以相同名称的两个不同模式出现。用户可以查看为其分配了选择特权的任何架构。


2

正如MusiGenesis所说的那样,在大多数数据库中:

模式:数据库:表::平面图:房子:房间

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

模式:数据库:表::所有者:房子:房间


2

与上述某些答案相反,这是我根据对每个答案的经验得出的理解:

  • MySQL: database/schema :: table
  • SQL Server: database :: (schema/namespace ::) table
  • 甲骨文: database/schema/user :: (tablespace ::) table

请更正我关于表空间对于Oracle是否可选的要求,因为我记得使用它们已经很长时间了。


1

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


1

数据库包含一个或多个命名模式,而这些命名模式又包含表。模式还包含其他种类的命名对象,包括数据类型,函数和运算符。相同的对象名称可以在不同的模式中使用,而不会发生冲突。例如,schema1和myschema都可以包含名为mytable的表。与数据库不同,架构不是严格分开的:用户有权访问所连接数据库中任何架构中的对象。

人们可能要使用模式的原因有几个:

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

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

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

架构类似于操作系统级别的目录,不同之处在于架构不能嵌套。

官方文档可以参考 https://www.postgresql.org/docs/9.1/ddl-schemas.html


0

模式包含数据库。

数据库是模式的一部分。

因此,架构>数据库。

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


0

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

这意味着您可以在一个数据库中拥有多个对象(例如表),这些对象不必属于同一功能类别。因此,您可以将它们分为各种架构,并为它们赋予不同的用户访问权限。

就是说,我不确定您是否可以在多个模式下拥有一个表。Management Studio UI提供了一个下拉菜单,用于为表分配架构,因此可以仅选择一个架构。我想如果您使用TSQL进行操作,它可能会创建2个(或多个)具有不同对象ID的不同对象。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.