schema和user区别

本文通过类比餐厅与顾客的关系来解释Oracle数据库中的Schema与User概念。Schema被视为餐厅,包含各种表等对象;User则代表顾客,拥有访问不同Schema的权限。尽管User创建了Schema及其对象,二者仍是独立存在的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       以下是自己对schema和user概念的理解

  
     认识这两个概念,我认为从结果向源头推导更容易理解为什么oracle会建立这两个用起来如此相似的概念。
     我们以餐厅和人举例,假设我们大街上看到10个人,10个餐厅。我们知道人名:人[1],人[2],人[3],人[4],人[5],人[6],人[7],人[8],人[9],人[10]。我们还不知道餐馆的名字,为区分给其编号:餐厅[1],餐厅[2],餐厅[3],餐厅[4],餐厅[5],餐厅[6],餐厅[7],餐厅[8],餐厅[9],餐厅[10],每个餐厅都有不同的菜式。餐厅和人是两个独立的物体,每个人可以选择不同的餐馆吃饭。我们在一个oracle数据库看到有schema和user两个概念。我们理解schema就是一个餐厅,不同的菜式相当与不同的方案对象,数据库中user就是相当于现实中的人。跟餐厅和人一样,schema和user也是两个不同的物体。每个user可以访问不同的schema。

      我们打听道编号为“餐厅[1]”的餐馆是由人[1]建立的,编号为“餐厅[2]”的参款是由人[2]建立的,以次类推,原来每个餐厅都是每个人各自建立的。虽然如此,但餐厅和人扔是两个独立的物体,每个人仍然可以选择不同的餐馆吃饭,尽管餐馆是每个人独自建立的。跟人和餐厅一样,schema和user仍是两个独立的物体存在于oracle中,尽管是user建立了schema里的schema object。
      我们又看到餐馆招牌上的名字其实就是人的名字,即编号为“餐馆[1]”的餐馆招牌上的名字就叫人[1]。同时我们也发现oracle中的schema名居然也是跟user一样。但是餐馆和人仍然是独立存在的,尽管是人建立了餐馆,尽管餐馆名与人名一样。同样的,schema和user也仍然是独立存在的,尽管是user建立了schema里的schema object,尽管schema名与user一样。

      我们又打听到每个餐馆的老板是建造餐馆的人,每个人可以对自己的餐馆的菜色,陈设进行修改,并且以前每个人只能在自己建立的的餐馆吃饭。后来由于实际需要,每个餐馆建造者同意别的人可以进自己餐馆吃饭,更有甚者同意别人对自己餐馆的菜色,陈设进行修改。同样的,对于每个user来说,都有自己所属的schema,对自己建立的schema object(这些schema object组成了schema)有很大的权限,之所以别的user能访问自己建立的schema object,是经过自己授权的。
      我们打算去其中一家餐馆吃饭,我们可以说去谁开的餐馆去吃,也可以说在餐馆名叫XX的吃,但是对于数据库来说,如果要访问某个schema中的schema object,需要指定的是schema名,而不能用建立schema object的user名,例如 select * from SCOTT.table_test,SCOTT为schema的名字,而不是user的名字,尽管两者名字是一样的。schema的名可以省略,用的是登陆用户所属的schema

       至此我们可以总结:schema和user是两个独立的抽象物体,schema内的schema object是由user建立的,user对自己建立的,组成schema的schema object有很大的权限,访问一个schema object需要指定的是schema名,而不是user名

### Scheme Schema 在技术领域的区别 #### 定义与用途 在技术领域中,“Scheme”Schema”虽然拼写相似,但在具体含义应用场景上有显著差异。 - **Scheme**通常指代一种协议、计划或模式,在计算机科学技术领域中,它更多地涉及网络通信中的协议前缀或者某种特定的技术实现方案。例如,在URL结构中,“http://” 或 “https://” 中的“http”“https”就是典型的scheme实例[^3]。此外,Scheme还可以用来描述某些编程语言的名字(如Lisp的一种方言),或者是跨平台应用间的数据交互方式,比如Android中的自定义deep link scheme用于指定如何唤起应用程序并导航到具体的页面[^3]。 - **Schema**则主要应用于数据库设计以及数据建模方面,代表的是关于数据存储结构的一个抽象模型或框架。对于关系型数据库而言,schema明确了表(Table)、字段(Field)及其属性(如类型、长度等),还有索引(Indexes)、约束(Constraints)以及其他元数据信息[^2]。另外,在XML文档或者其他半结构化文件处理场景下,schema同样扮演着定义合法元素组合的角色,确保数据的一致性有效性[^4]。 #### 应用场景对比 - 当讨论有关于Web请求路径规划或是移动设备之间通过特殊链接相互跳转的功能时,则更倾向于使用term 'scheme'来表达这种逻辑上的连接规则[^3]。 - 而当涉及到构建复杂的企业级信息系统后台架构,特别是围绕持久化层的设计考量之时,就会频繁提及'database schema',因为它直接关联到了整个系统的性能表现、扩展能力等方面的关键决策因素[^2]. ```python # 示例代码展示如何创建简单的SQLAlchemy ORM映射类,这实际上是在定义Python对象对应的Database Schema的一部分 from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) # 上述User类即为针对users table所建立起来的一个基本ORM model,属于整体database schema构成单元之一[^4]. ``` #### 总结 因此可以看出,在不同的技术业务背景下,这两个词各自承担了不可替代的作用。“Scheme”侧重于描绘高层次的操作流程或者通讯标准;而“Schema”,则是深入到底层细节层面去刻画那些支撑这些操作得以顺利完成的基础构件蓝图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值