`
java_mzd
  • 浏览: 583605 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

(转)数据库 schema含义

阅读更多

 http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html#information-schema-tables

数据库Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。还有一种是物理上的 Schema,指的是数据库中的一个名字空间,它包含一组表、视图和存储过程等命名对象。物理Schema可以通过标准SQL语句来创建、更新和修改。例如以下SQL语句创建了两个物理Schema:

    create schema SCHEMA_A;
    create table SCHEMA_A.CUSTOMERS(ID int not null,……);

    create schema SCHEMA_B;
    create table SCHEMA_B.CUSTOMERS(ID int not null,……);

简单的说:就是一个数据库用户所拥有的数据库的对象。  
  比如scott用户建立了表,索引,视图,存储过程等对象,那么这些对象就构成了schema   scott

 

  在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,这样,一个大数据库就可以根据应用把其表分开来管理。不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名,也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下,每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的数据(即schema用户自己的数据).

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如果我们想了解数据库中的User和Schema到底什么关系,那么让我们首先来了解一下数据库中User和Schema到底是什么概念。
       在SQL Server2000中,由于架构的原因,User和Schema总有一层隐含的关系,让我们很少意识到其实User和Schema是两种完全不同的概念,不过在SQL Server2005中这种架构被打破了,User和Schema也被分开了。      
       首先我来做一个比喻,什么是Database,什么是Schema,什么是Table,什么是Column,什么是Row,什么是User?我们可以把Database看作是一个大仓库,仓库分了很多很多的房间,Schema就是其中的房间,一个Schema代表一个房间,Table可以看作是每个Schema中的床,Table(床)就被放入每个房间中,不能放置在房间之外,那岂不是晚上睡觉无家可归了J。,然后床上可以放置很多物品,就好比Table上可以放置很多列和行一样,数据库中存储数据的基本单元是Table,现实中每个仓库放置物品的基本单位就是床, User就是每个Schema的主人,【所以Schema包含的是Object,而不是User】,其实User是对应于数据库的(即User是每个对应数据库的主人),既然有操作数据库(仓库)的权利,就肯定有操作数据库中每个Schema(房间)的权利,就是说每个数据库映射的User有每个Schema(房间)的钥匙,换句话说,如果他是某个仓库的主人,那么这个仓库的使用权和仓库中的所有东西都是他的(包括房间),他有完全的操作权,可以扔掉不用的东西从每个房间,也可以放置一些有用的东西到某一个房间,当然也可以拆除一个房间(Remove Schema)。呵呵,和现实也太相似了吧。我(仓库的管理员)还可以给User分配具体的权限,也就是他到某一个房间能做些什么,是只能看(Read-Only),还是可以像主人一样有所有的控制权(R/W),这个就要看这个User所对应的角色Role了,至于分配权限的问题,我留在以后单独的blog中详述。比喻到这里,相信大家都清楚了吧。
OK,我们话题继续!
       在SQL Server2000中,假如我们在某一个数据库中创建了用户Bosco,按么此时后台也为我们默认地创建了默认Schema 【Bosco】。Schema的名字和User的名字相同,这也是我们分不清楚用户和Schema的原因。
       在SQL Server2005中,为了向后兼容,当你用sp_adduser 存储过程创建一个用户的时候,SQL Server2005同时也创建了一个和用户名相同的Schema,然而这个存储过程是为了向后兼容才保留的,我们应该逐渐熟悉用新的DDL语言Create User和Create Schema来操作数据库。在SQL Server2005中,当我们用Create User创建数据库用户时,我们可以为该用户指定一个已经存在的Schema作为默认Schema,如果我们不指定,则该用户所默认的Schema即为dbo Schema,dbo 房间(Schema)好比一个大的公共房间,在当前登录用户没有默认Schema的前提下,如果你在大仓库中进行一些操作,比如Create Tabe,如果没有指定特定的房间(Schema),那么你的物品就只好放进公共的dbo房间(Schema)了。但是如果当前登录用户有默认的Schema,那么所做的一切操作都是在默认Schema上进行(比如当前登录用户为login1,该用户的默认Schema为login1,那么所做的所有操作都是在这个login1默认Schema上进行的。实验已经证明的确如此)。估计此时你会有一点晕,为什么呢?我刚才说dbo是一个Schema,但是你可以在数据库中查看到,dbo同时也是一个user,晕了吧,呵呵。
       在SQL Server2005中创建一个数据库的时候,会有一些默认Schema被创建,被默认创建的Schema有:dbo,INFORMATION_SCHEMA, guest,sys等等(还有一些角色Schema,不提了,又晕了)。
       我在上文中已经提到了,在SQL Server2005中当用存储过程sp_adduser创建一个user时,同时SQL Server2005也为我们创建了一个默认的和用户名相同的Schema,这个时候问题出来了,当我们create table A时,如果没有特定的Schema做前缀,这个A表创建在了哪个Schema上,即进入了哪个房间?答案是:
如果当前操作数据库的用户(可以用Select current_user查出来)有默认的Schema(在创建用户的时候指定了),那么表A被创建在了默认的Schema上。
 如果当前操作数据库的用户没有默认的Schema(即在创建User的时候默认为空),但是有一个和用户名同名的Schema,那么表A照样被创建在了dbo Schema上,即使有一个和用户名同名的Schema存在,由于它不是该用户默认的Schema,所以创建表的时候是不会考虑的,当作一般的Schema来处理,别看名字相同,可是没有任何关系哦。
如果在创建表A的时候指定了特定的Schema做前缀,则表A被创建在了指定的 Schema上(有权限吗?)
       现在问题又出来了,在当前操作数据库的用户(用select current_user可以查看到,再次强调)没有默认Schema的前提下,当我们用Create table A语句时,A表会去寻找dbo Schema,并试图创建在dbo Schema上,但是如果创建A表的用户只有对dbo Schema的只读权限,而没有写的权限呢?这个时候A表既不是建立不成功,这个就是我以后会提及到的Login,User, Role和Schema四者之间的关系。在这里,为了避免混淆和提高操作数据库的速度(在少量数据范围内,对我们肉眼来说几乎看不到差异),我们最好每次在操作数据库对象的时候都显式地指定特定的Schema最为前缀。

       现在如果登录的用户为Sue,该用户有一个默认Schema也为Sue,那么如果现在有一条查询语句为Select * from mytable, 那么搜寻每个房间(Schema)的顺序是怎样的呢?顺序如下:

首先搜寻 sys.mytable   (Sys Schema)
然后搜寻 Sue.mytable   (Default Schema)
最后搜寻 dbo.mytable      (Dbo Schema)
       执行的顺序大家既然清楚了,那么以后在查询数据库表中的数据时,最好指定特定的Schema前缀,这样子,数据库就不用去扫描Sys Schema了,当然可以提高查询的速度了。

       另外需要提示一下的是,每个数据库在创建后,有4个Schema是必须的(删都删不掉),这4个Schema为:dbo,guest,sys和INFORMATION_SCHEMA,其余的Schema都可以删除。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yanjiangbo/archive/2007/09/12/1782576.aspx

分享到:
评论

相关推荐

    数据库 schema含义 .doc

    数据库 schema 含义 数据库 schema 含义是指数据库中的一组 DDL 语句集,完整地描述了数据库的结构。同时,它也可以指的是数据库中的一个名字空间,包含一组表、视图和存储过程等命名对象。 概念上的 Schema 指的...

    手动添加schema文件

    手动添加schema文件是一项重要的数据库管理工作,尤其对于开发者和系统管理员来说。Schema在数据库中可以被理解为一种蓝图,它定义了数据库的结构、表格、列、索引和其他对象。在本篇文章中,我们将深入探讨手动添加...

    oracle hr schema

    同时,理解每个表和字段的业务含义也是十分重要的,这有助于我们更好地理解和使用HR Schema。 总而言之,Oracle HR Schema是一个教育和实践的宝贵资源,它展示了Oracle数据库在处理企业级人力资源数据时的结构和...

    Laravel开发-laravel-schema-extend

    这在数据库设计中是非常有用的,因为注释可以提供关于数据含义和用途的重要信息,帮助团队成员更好地理解数据库结构。 首先,让我们了解Laravel的迁移系统。在Laravel中,迁移是管理数据库结构变化的一种方式。通过...

    Sql Server数据库转换Word

    本教程将详细介绍如何将`Sql Server`数据库表结构转换成Word形式,包括字段名、字段类型和字段含义等内容。 首先,我们需要理解`Sql Server`数据库的基本概念。在`Sql Server`中,数据库由一系列表组成,每个表由多...

    XML_Schema 教程 详细版

    1. **数据类型支持**:XML Schema引入了数据类型的概念,使数据验证更加准确,与数据库交互更便捷。 2. **XML语法编写**:XML Schema本身是用XML语言编写的,便于理解和编辑。 3. **数据保护**:通过数据类型和结构...

    数据库习题及详解

    - **解析**:模式(Schema)描述了数据库的整体逻辑结构和特性,是数据库的核心。选项A正确,它描述了数据库的全局逻辑视图。 7. **数据独立性的维护** - **知识点**:了解如何通过不同的映射来保证数据独立性。 ...

    MRP及MRP及schemaMRP及schemaMRP及schema

    2. **数据库Schema**:在MRP系统中,schema定义了数据库的结构,包括表、字段、键、索引等元素。它描述了数据如何存储、关联和访问,对于高效的数据管理和查询至关重要。 3. **MRP Schema设计**:一个好的MRP ...

    关系数据库到RDFS的转换

    关系数据库到RDFS的转换是将传统的关系数据库模型转化为基于Resource Description Framework Schema (RDFS)的语义网络数据表示的过程。这一过程对于实现数据的互操作性和知识共享具有重要意义,尤其是在大数据、人工...

    生成数据库说明文档Excel

    这种文档提供了关于数据库表结构、字段名称、字段类型、长度、约束、以及字段含义等详细信息,帮助开发人员、数据分析人员以及业务人员更好地理解和使用数据库。在SQL Server中,虽然可以通过查询系统表获取这些信息...

    数据库比对工具

    数据库比对是数据库管理中的一个重要环节,它涉及到比较两个数据库的模式(schema)或数据,以识别它们之间的差异。这通常是为了确保数据库的一致性,尤其是在更新、迁移或复制数据库时。比对过程可以检测表结构、...

    数据库考试题库

    - **数据库的三级模式结构**:数据库系统通常采用三级模式结构来描述数据的组织方式,即模式(Schema)、外模式(External Schema)和内模式(Internal Schema)。模式描述了数据库中全体数据的整体逻辑结构和特征;...

    数据库系统概论复习资料

    19. **数据库的模式结构**:描述数据库中全体数据的全局逻辑结构和特征的是模式(Schema)。 20. **数据独立性的具体含义**:数据独立性是指应用程序不受数据存储结构和逻辑结构变化的影响。 21. **信息世界与...

    信息管理系统开发的数据库命名规范

    在数据库Schema设计上,系统Schema分为系统管理和数据字典,系统Schema不分年度设立,而其他系统Schema如总账系统,需要按年度设立。 接下来,部分字段的命名约定也很关键。例如,"LASTEST_OP_DATE"用于记录最后...

    数据库运维形考任务5-实验5 数据库性能监视与优化实验.docx

    在进行这些实验时,不仅需要记录命令和结果,还应分析这些指标的含义,理解它们对数据库性能的影响,以及可能的优化措施。通过实验文档和分析报告,可以深入理解数据库的性能监视与优化,并为实际工作中的数据库维护...

    mysql、oracle 数据库生成文档源码

    在生成文档时,表的注释和字段的描述会非常关键,它们提供了关于数据含义和用途的重要上下文。 5. **配置修改**:“导入工程修改数据库配置即可运行”提示我们需要根据实际环境调整源码中的配置文件,如数据库连接...

    京东金融数据库开发管理规范-SQL

    * SCHEMA:ORACLE 中的数据库对象的集合,我们可简单理解为一个 ORACLE 用户 2. 技术规范: 2.1 DML 语句书写规范: * 规范1:脚本命名格式,按以下格式结尾:<SCHEMA>_DML.SQL和<SCHEMA>_DML_ROLLBACK.SQL * ...

    数据库原理选择题总结

    题目中提到的“ûsteller”部分可能是因为文本编码问题导致显示不正确,但我们可以推测这部分涉及的是数据库中的模式(Schema)概念。模式在数据库中扮演着重要的角色,它定义了数据的结构、类型以及数据之间的关系...

    计算机英语词汇--数据库部分

    18. **Schema** - 数据库模式,定义了数据库的结构和规则。 19. **Index** - 索引是一种加速数据检索的机制,类似于书籍的目录。 20. **Duration** - 持续时间,用于描述数据库操作或事务的持续时间。 21. **...

    DWRESCR DWH SCHEMA帮助文档

    1. **模式(Schema)**:在数据库中,模式是一组逻辑结构,定义了数据的组织方式。DWRESCR DWH SCHEMA中的模式描述了数据仓库中的表、视图、索引和其他对象的结构,以及它们之间的关系。这有助于确保数据的一致性和...

Global site tag (gtag.js) - Google Analytics