我真的对术语数据库,用户和架构感到困惑。谁能解释彼此之间的不同之处(如果有的话)?

如果相同,那么它们之间有什么相似之处?我们如何使用它们?以及如何创建它们?

评论

希望这会给出基本思想:answers.com/Q/Difference_between_user_and_schema_oracle

#1 楼

在Oracle中,用户和模式本质上是同一件事。您可以认为用户是用于连接数据库的帐户,模式是属于该帐户的对象集(表,视图等)。

请参阅此文章。关于堆栈溢出:Oracle中的用户和模式之间的区别?有关更多详细信息和更多链接。

使用create user语句创建用户。这也会“创建”模式(最初是空的)-您无法创建这样的模式,它已绑定到用户。创建用户后,管理员可以向用户授予特权,这将使其能够创建表,执行select查询,insert以及其他所有操作。

数据库是包含所有内容的东西。您创建的用户及其数据(以及使整个系统正常运行的一堆预定义系统用户,表,视图等)。您应该阅读《概念指南》中的Oracle数据库体系结构文档(实际上,整个页面值得一读-该页面的上半部分有一个有关用户和模式的部分),以介绍数据库的含义以及对数据库的理解。数据库实例是-两个重要的概念。

一旦安装了Oracle软件堆栈,就可以使用create database语句创建数据库。但是使用dbca(数据库创建助手)更容易上手。

评论


“用户和模式本质上是同一件事” –如果是真的,那就是我所听说过的最愚蠢的命名方式。

–user64141
19年11月20日在21:51

那么,如何在不为每个用户创建新架构的情况下添加具有不同特权的用户(如在单独的登录名中一样)?您是否应该在每个架构中仅使用一个登录凭证?

–Priyank
19/12/27在8:48

@Priyank:您可以创建任意数量的用户,并为他们提供所需的任何特权。给很多用户没有任何表/视图/任何东西的情况并不罕见-在这种情况下他们的模式是否“存在”主要是哲学上的争论。

–垫子
19/12/28在12:18



#2 楼

为了开始理解它们之间的区别,我认为我们必须开始说这种命名法是Oracle的一个错误。

我假设如果您有一个名为TRITON的ERP,您希望数据库命名为TRITON,或者在我的公司,它被称为JENNY EXPORT。我可能会决定将我的数据库命名为JENNYEXP或类似的名称,不需要任何同名用户。

在Oracle中,您需要在创建表之前创建一个USER,并且将这个TABLES集合称为SCHEMA很奇怪。

然后您可以创建实际用户并授予适当的用户权限。顺便说一下,按照本示例使用TRITON这样的数据库的权限,如果通过SQL DEVELOPER连接,则必须命名连接。

我知道我听起来很沮丧,但是这样做更有意义我是MS SQL SERVER命名约定,我可以补充一点,我早于SQL SERVER来使用Oracle。

#3 楼

根据有时使用术语的方式,USERSCHEMA有点相似。但是也有很大的不同。如果“ USER”拥有任何对象,则可以将SCHEMA称为USER,否则它将仅保留为“ USER”。一旦USER拥有至少一个对象,然后根据上述所有定义,该USER现在可以称为SCHEMA

评论


我认为您在这里指出的是“ SCHEMA”一词是多方面的。一方面,它是数据库对象的名称空间。另外,在Oracle(及其他?)中,但在PostgreSQL中则不是,它是一个数据库对象名称空间,它完全包含由共享模式名称的用户创建的对象。从另一个角度看,它是数据库中对象的关系和结构,通常同时忽略所有权和名称空间。

–安德鲁·沃尔夫(Andrew Wolfe)
16年1月22日在16:35

#4 楼

数据库。
数据库是数据的集合,实际存储数据。
它是一个物理内存组件,连接到装有DBMS软件的计算机以操纵该内存组件中的数据,即已安装的计算机使用dbms软件的服务器或服务器称为“服务器”或“数据库服务器”。服务器(计算机)和数据库(内存组件)不同,但根据情况,大多数情况下称为“相同”。
USER和SCHEMA
两个词,用户和架构是可互换的,这就是为什么大多数人对这些词感到困惑。
用户
用户是用于连接数据库(服务器)的帐户。我们可以使用CREATE USER IDENTIFIED创建用户BY。
实际上,Oracle数据库包含用于处理数据的逻辑和物理结构。该架构也是逻辑结构,用于处理数据库(内存组件)中的数据。
它是由Oracle在用户创建时自动创建的。它包含与该架构相关联的用户创建的所有对象。例如,如果我创建了一个名称为santhosh的用户,那么oracle创建了一个名为santhosh的架构,Oracle将用户santhosh创建的所有对象存储在santhosh架构中。
我们可以使用CREATE SCHEMA语句创建模式,但是Oracle自动为该模式创建用户。
我们可以使用DROP SCHEMA <name> RESTRICT语句删除模式,但是它不能删除包含模式的对象,因此要删除模式,必须是空的。在这里,限制词会强制您指定不带对象的模式。 /> CASCADE
,因此Oracle删除架构中的对象,然后自动删除用户,从其他架构(如视图和私有同义词)引用这些架构对象的对象将变为无效状态。

#5 楼

我要补充一点,以上陈述适用于Oracle的实现,但是其他数据库(包括SQL Server和PostgreSQL)仅将模式用作命名空间,即将对象分组的一种方式。例如,登台模式可以对登台数据中使用的所有对象进行分组,计费模式可以将与计费相关的所有对象进行分组。

评论


当您说“以上声明”时,不确定所指的是什么,但是SQL和Oracle中的模式是权限分组。换句话说,这不仅是将相似对象分组在一起的一种方法,而且是一种将对象分组的方法,这将简化权限管理,因为您可以向架构授予权限,从而避免了必须向架构内的每个对象授予权限。

– ron
2015年11月23日在2:29

#6 楼

从我的角度来看,关于术语“数据库”,“架构”和“用户”的一些困惑还来自Microsoft SQL Server和Oracle之间的差异。


“内部” Oracle如果没有进一步的说明,则不应理解模式与用户/登录之间的区别。 “用户”是用于登录数据库的帐户(通常没有表或视图之类的自己的对象),如果它“拥有”对象,则可以称为“模式”。但这已经在上面进行了解释。
在MS SQL Server中,术语“数据库”描述的对象与Oracle中的“架构”最相似。两者都是由“ database / schemaowner.object”“限定”的对象的组合,请注意“。”作为“组合”和实际对象之间的分隔符。

BTW:请注意Microsoft SQL Server和Oracle中“实例”的不同含义。

评论


我相信你很困惑。在SQL Server中,层次结构为“实例”>“数据库”>“架构”>“表”。在Oracle中,“实例”不是数据库的集合,但下面的架构是相同的:“数据库”>“架构”>“表”。

–万事通
7月24日18:18

#7 楼

User!= Schema,User和Schema不同,但是可以互换使用

评论


请添加有关它们的不同之处的详细信息。

– Erik
2015年9月10日14:55在

#8 楼

我是根据概念告诉您的,而不是基于您正在使用的任何类型的数据库管理系统的。

从概念上讲:
数据库:只是一堆数据,主要是与管理无关或无关的数据。

模式:模式是指正式构造非托管相关/不相关数据,以便可以由某些了解该模式提供的形式定义的管理系统来对其进行管理。架构基本上是提供概述的方案。例如,您有XSD,它定义了创建XML的架构。您有RDBMS,它基于Codd规则定义了自己的模式,该规则基本上定义了创建RDBMS的方案。

现在,如果您想了解更多信息,请参考此链接。

用户使用模式指定的形式语言来访问数据库