首先,可以先看一下schema和user的定义:
A schema is a collection of database objects (used by a user).
Schema objects are the logical structures that directly refer to the database’s data.
A user is a name defined in the database that can connect to and access objects.
Schemas and users help database administrators manage database security.
从中我们可以看出,schema为数据库对象的集合,为了区分各个集合,需要给这个集合起个名字,这些名字就是在企业管理器的方案下看到的许多类似用户名的节点,这些类似用户名的节点其实就是一个schema。
schema里面包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。
一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是在企业管理器的方案下看到schema名都为数据库用户名的原因。
Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决(Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的)。在创建一个用户的同时,为这个用户创建一个与用户名同名的schem并作为该用户的缺省shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。
一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。比如我们在访问数据库时,访问scott用户下的emp表,通过select * from emp; 其实,这sql语句的完整写法为select * from scott.emp。在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,需要在创建对象时指定该对象的表空间。
有人举了个很生动的例子,来说明Database、User、Schema、Tables、Col、Row等之间的关系
“可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的床,Table(床)就被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了。
然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样,数据库中存储数据的基本单元是Table,现实中每个仓库放置物品的基本单位就是床, User就是每个Schema的主人(所以Schema包含的是Object,而不是User)。
其实User是对应与数据库的(即User是每个对应数据库的主人),既然有操作数据库(仓库)的权利,就肯定有操作数据库中每个Schema(房间)的权利,就是说每个数据库映射的User有每个Schema(房间)的钥匙,换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的(包括房间),他有完全的操作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间。还可以给User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了”
分享到:
相关推荐
通过Oracle HR Schema,用户可以学习如何设计和管理关系数据库,理解SQL语言,以及如何在实际业务环境中使用Oracle数据库。对于开发者和DBA来说,这是一个极好的实践平台,可以加深对数据库管理和开发的理解。
5. **创建Schema用户**:Schema在Oracle中是逻辑上的数据库对象集合,通常与一个特定的数据库用户关联。使用`CREATE USER`创建用户,`GRANT`权限: ```sql CREATE USER MyUser IDENTIFIED BY password; GRANT ...
使用`foodmart_for_oracle.sql`脚本在Oracle环境中搭建FoodMart Schema,可以体验到如何将复杂的企业数据转换成结构化的、面向分析的数据模型。该脚本通常会包含创建表、插入数据、建立索引等数据库操作,确保数据...
在Oracle数据库环境中,高效地生成指定复杂样式的XML文件是一项重要的任务,特别是在处理大量数据时。Oracle提供了多种方法来实现这一目标,包括使用PL/SQL过程、内置的XML函数以及XMLType对象。以下是对这个主题的...
在C#中调用Oracle存储过程来返回数据集是一个常见的任务,这涉及到ADO.NET库的使用,特别是OracleClient组件。Oracle存储过程是数据库中的预编译SQL代码块,可以接收输入参数,执行复杂的业务逻辑,并返回结果。在C#...
在IT行业中,数据库管理是至关重要的,特别是在Oracle这样的大型企业级数据库系统中。批量获取Oracle数据表记录信息是一项常见的需求,对于数据库管理员和开发者来说,能够有效地监控和管理数据库资源至关重要。下面...
### Oracle中比对两张表之间数据是否一致的几种方法 #### 概述 在Oracle数据库管理中,确保数据的一致性和准确性是非常重要的任务之一。在实际应用中,可能需要经常对比两个表之间的数据是否一致,这有助于发现并...
- **时间管理模块**:重点介绍 SAP ERP HCM 中的时间管理模块,该模块用于记录员工的出勤情况、加班时间、休假等信息,帮助企业进行有效的劳动力管理。 - **薪酬管理模块**:介绍薪酬管理模块的主要功能,包括工资...
这包括可能的员工信息、销售记录、产品目录等模拟业务场景的数据,让学习者能够体验到实际数据库中的操作。 2. **ot_schema.sql**: "Schema"在Oracle中指的是一个命名空间,它包含了用户的对象,如表、视图、索引、...
在Oracle数据库管理中,开启Audit(审计)是一项重要的安全措施,用于跟踪和记录用户活动、权限使用情况以及系统操作,以增强安全性并满足合规性要求。本文将深入探讨如何在Oracle环境中配置和使用Audit功能,包括...
使用 Toad 导出 Oracle 数据库某个或多个表中的数据 在使用 Toad 的过程中,我们可以使用它来导出 Oracle 数据库中的某个或多个表中的数据。下面我们将详细介绍如何使用 Toad 来实现这个功能。 首先,我们需要登录...
Oracle 数据库中 DUAL 表的使用 DUAL 表是 Oracle 数据库中一个特殊的表,它是任何用户都可以读取的公共表。DUAL 表的用途非常广泛,常用在没有目标表的 Select 语句块中。下面都是 DUAL 表的一些常见使用场景: ...
### Oracle转DB2对照知识点详解 #### 1. Oracle SQL PL 和 DB2 inline SQL PL (内嵌) 比较 ##### 1.1 创建存储过程 - **Oracle**: 支持 `CREATE OR REPLACE` 语法,允许在已有存储过程的基础上进行替换。 ```sql ...
【Oracle表结构导出工具包】是一个集合了各种依赖库的压缩包,旨在帮助用户方便地从Oracle数据库中导出表结构。这个工具包的核心功能是将Oracle数据库的表定义转换为可读的Excel格式,便于管理和分享。下面将详细...
在Oracle数据库中,通常使用的关系模型将数据表示为表格,并通过SQL(结构化查询语言)进行数据的查询、更新、插入和删除操作。 Oracle数据库系统的核心组件主要包括以下几个部分: 1. 数据库实例(Instance):是...
它在不同的Oracle版本中有着不同的名称,如Oracle8.0.x中的ConText,Oracle8i中的interMedia Text,以及从Oracle9i开始的Oracle Text。Oracle Text不仅适用于在数据库中搜索文本,还能够处理多种文档格式,如ORD、...
数据仓库建模技术.pdf 在数据库中实现base64编码和解码.doc 触发器使用教程和命名规范.doc TransactSQL.doc Schema常用脚本.doc rsultset.doc oracle傻瓜手册 ORACLE 中存储过程定期分割表.doc ORACLE 物理文件大小...
首先,我们来了解一下Oracle的基本命名原则。Oracle中的所有对象,如表、用户、密码等,其名称遵循以下规则: 1. 名称长度限制为30个字符。 2. 名称必须以字母开头。 3. 可以包含字母(大小写不区分,除非在双引号内...