数据库与用户与架构之间的区别


Answers:


77

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

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

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

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

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


2

根据有时使用术语的方式,a USER和a SCHEMA有点相似。但是也有很大的不同。一个USER可以称得上是SCHEMA如果“ USER”拥有任何对象,否则只会仍然是一个“ USER”。一旦USER拥有了至少一个对象,然后根据上述所有定义,… USER现在可以称为SCHEMA


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

2

为了开始理解差异,我认为我们必须开始说这种命名法是Oracle的一个错误。

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

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

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

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


1

数据库。

数据库是数据的集合,实际存储数据。它是一个物理内存组件,连接到装有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不允许您删除包含对象的用户。

DROP USER <name> CASCADE

因此,Oracle删除架构中的对象,然后自动删除用户,从其他架构(如视图和私有同义词)引用这些架构对象的对象将变为无效状态。


-2

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


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

-4

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


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

-4

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

从概念上讲:数据库:只是一堆数据,大多数是不受管理的相关或不相关数据。

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

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

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

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.