这可能是一个类似(或更糟)的问题。但我一直将模式视为数据库中的表定义。这是错误的或不完全正确的。我对数据库课程的记忆不多。
答案 0 :(得分:214)
架构:数据库:表 :: 平面图: house :室
答案 1 :(得分:104)
关系模式是表的逻辑定义 - 它定义了表的名称,以及每列的名称和类型。这就像一个计划或蓝图。 数据库模式是整个数据库的关系模式的集合。
table 是一个带有一堆行(又称“元组”)的结构,每个行都具有由模式定义的属性。表可能还有索引,以帮助查找某些列的值。
数据库正式是任何数据集合。在此上下文中,数据库将是表的集合。 DBMS (数据库管理系统)是管理和运行数据库的软件(如MySQL,SQL Server,Oracle等)。
答案 2 :(得分:16)
简而言之,模式是整个数据库的定义,因此它包括表,视图,存储过程,索引,主键和外键等。
答案 3 :(得分:11)
此特定帖子已显示仅与Oracle相关,而Schema的定义在另一个DB的上下文中更改。
可能只是google up的东西,但是FYI术语的定义似乎有所不同,这是最烦人的事情:)
在Oracle中,数据库是一个数据库。在你的脑海中将其视为数据文件和重做日志以及数据库本身磁盘上的实际物理存在(即不是实例)
架构实际上是一个用户。更具体地说,它是用户拥有的一组表/过程/索引等。另一个用户具有不同的模式(他/她拥有的表),但是用户也可以看到他们选择了特权的任何模式。因此,数据库可以包含数百个模式,每个模式包含数百个表。您可以在不同的模式中使用具有相同名称的表,这些模式位于同一数据库中。
表是一个表,一组包含数据的行和列,包含在模式中。
例如,SQL Server中的定义可能有所不同。我不知道这个。
答案 4 :(得分:9)
模式行为看起来像是在OOP世界中看到的父对象。所以它不是数据库本身。也许this link很有用。
但是,在MySQL中,两者是等价的。关键字DATABASE或DATABASES 可以用SCHEMA或SCHEMAS替换它出现的任何地方。例子:
SCHEMA&数据库术语是DBMS依赖的。
表是一组数据元素(值),使用垂直列模型(由其名称标识)和水平行进行组织。数据库包含一个或多个(通常)表。并将数据存储在这些表中。这些表可能彼此相关(See here)。
答案 5 :(得分:2)
有关架构的更多信息:
在SQL 2005中,架构是一种对对象进行分组的方法。它是一个可以放置对象的容器。人们可以拥有这个对象。您可以授予架构权限。
2000年,架构等同于用户。现在它已经破解了,非常有用。您可以将所有用户触发器放在某个模式中,然后将管理员触发到另一个模式中。将EXECUTE授予适当的用户/角色,并在特定过程中授予EXECUTE。尼斯。
点符号将如下所示:
Server.Database.Schema.Object
或
myserver01.Adventureworks.Accounting.Beans
答案 6 :(得分:2)
Schema
是数据库对象的集合,其中也包含逻辑结构。
它拥有拥有它的用户的名称。
database
可以包含任意数量的Schema。
数据库中的一个表可以出现在两个不同的同名模式中。
用户可以查看已为其分配的任何架构选择权限。
答案 7 :(得分:1)
在oracle Schema中是一个用户在一个数据库下,例如scott是数据库orcl中的一个模式。 在一个数据库中,我们可能有许多架构,如scott
答案 8 :(得分:1)
正如MusiGenesis在大多数数据库中所做的那样:
schema:database:table :: floor plan:house:room
但是,在Oracle中,可能更容易想到:
schema:database:table :: owner:house:room
答案 9 :(得分:1)
与上述一些答案相反,以下是我根据每个答案的经验进行的理解:
database/schema :: table
database :: (schema/namespace ::) table
database/schema/user :: (tablespace ::) table
请告诉我表格空间是否是可选的,因为我记得使用它们已经很长时间了。
答案 10 :(得分:1)
根据https://www.informit.com/articles/article.aspx?p=30669
<块引用>所有对象的名称在某个范围内必须是唯一的。每一个 数据库必须有一个唯一的名称;架构的名称必须是唯一的 在单个数据库范围内,表名必须是 在单个模式的范围内是唯一的,并且列名必须是 表中唯一。索引的名称在一个索引中必须是唯一的 数据库。
答案 11 :(得分:0)
架构包含数据库。
数据库是Schema的一部分。
所以,架构&gt;数据库。
模式包含视图,存储过程,数据库,触发器等。
答案 12 :(得分:0)
架构不是整个数据库的计划。它是数据库中对象子集(ex.tables)的计划/容器。
这就是说,你可以在一个数据库中有多个对象(例如表格),这些对象不一定属于同一个功能类别。因此,您可以将它们分组到各种模式下,并为它们提供不同的用户访问权限。
那就是说,我不确定你是否可以在多个模式下有一个表。 Management Studio UI提供了一个下拉列表,可以为表分配模式,从而可以只选择一个模式。我想如果你使用TSQL,它可能会创建2个(或多个)具有不同对象ID的不同对象。
答案 13 :(得分:0)
数据库架构是一种逻辑分组对象(如表,视图,存储过程等)的方法。将架构视为对象的容器。 表是行和列的集合。 所有表的组合构成了一个db。
答案 14 :(得分:0)
一个数据库包含一个或多个命名模式,这些命名模式又包含表。模式还包含其他种类的命名对象,包括数据类型,函数和运算符。相同的对象名称可以在不同的模式中使用,而不会发生冲突。例如,schema1和myschema都可以包含名为mytable的表。与数据库不同,架构不是严格分开的:只要有权限,用户就可以访问与其连接的数据库中任何架构中的对象。
为什么要使用模式有几个原因:
允许许多用户使用一个数据库而不会互相干扰。
将数据库对象组织为逻辑组,以使其更易于管理。
第三方应用程序可以放在单独的架构中,这样它们就不会与其他对象的名称冲突。
模式类似于操作系统级别的目录,除了模式不能嵌套。
可以参考官方文档 https://www.postgresql.org/docs/9.1/ddl-schemas.html
答案 15 :(得分:0)
我尝试根据我对以下类比的理解来回答: