数据库Schema两种含义

百度文库中  Schema 的解释:
数据库中的Schema,为 数据库对象的集合,一个用户一般对应一个schema。
官方定义如下:
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的),在创建一个用户的同时为这个用户创建一个与用户名同名的schema并作为该用户的缺省schema。即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。这就像一个用户有一个缺省的 表空间,但是该用户还可以使用其他的表空间,如果我们在创建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
sql> grant dba to scott
sql> create table test(name char(10))
table created.
sql> create table system.test(name char(10))
table created.
sql> insert into test values(' scott' )
1 row created.
sql> insert into system.test values(' system' )
1 row created.
sql> commit
commit complete.
sql> conn system/manager
connected.
sql> select from test
name
----------
system
sql> alter session set current_schema = scott --改变用户缺省schema名
session altered.
sql> select from test
name
----------
scott
sql> select owner table_name from dba_tables where table_name=upper(' test' )
owner table_name
------------------------------ ------------------------------
scott test
system test
--上面这个查询就是我说将schema作为user的别名的依据。实际上在使用上,shcema与user完全一样,没有什么区别,在出现schema名的地方也可以出现user名。



------------- 分割线

数据库Schema两种含义
2010-09-01 17:07
数据库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与catalog简介

    按照SQL标准的解释,在SQL环境下Catalog和Schema都属于抽象概念,可以把它们理解为一个容器或者数据库对象命名空间中的一个层次,主要 用来解决命名冲突问题。从概念上说,一个数据库系统包含多个Catalog,每个Catalog又包含多个Schema,而每个Schema又包含多个数 据库对象(表、视图、字段等),反过来讲一个数据库对象必然属于一个Schema,而该Schema又必然属于一个Catalog,这样我们就可以得到该 数据库对象的完全限定名称从而解决命名冲突的问题了;例如数据库对象表的完全限定名称就可以表示为:Catalog名称.Schema名称.表名称。这里 还有一点需要注意的是,SQL标准并不要求每个数据库对象的完全限定名称是唯一的,就象域名一样,如果喜欢的话,每个IP地址都可以拥有多个域名。

    从实现的角度来看,各种数据库系统对Catalog和Schema的支持和实现方式千差万别,针对具体问题需要参考具体的产品说明书,比较简单而常用的实现方式是使用数据库名作为Catalog名,使用用户名作为Schema名,具体可参见下表:

表1 常用数据库

供应商

Catalog支持

Schema支持

Oracle

不支持

Oracle User ID

MySQL

不支持

数据库名

MS SQL Server

数据库名

对象属主名,2005版开始有变

DB2

指定数据库对象时,Catalog部分省略

Catalog属主名

Sybase

数据库名

数据库属主名

Informix

不支持

不需要

PointBase

不支持

数据库名

    最后一点需要注意的是Schema这个单词,它在SQL环境下的含义与其在数据建模领域中的含义是完全不同的。在SQL环境下,Schema是一组相关的 数据库对象的集合,Schema的名字为该组对象定义了一个命名空间,而在数据建模领域,Schema(模式)表示的是用形式语言描述的数据库的结构;简 单来说,可以这样理解,数据建模所讲的Schema<也就是元数据>保存在SQL环境下相应Catalog中一个Schema<名叫 DEFINITION_SCHEMA>下的表中,同时可以通过查询该Catalog中的另一个Schema<名叫 INFORMATION_SCHEMA>下的视图而获取,具体细节不再赘述。

    另外我结合MySQL官方的MySQL administrater数据库管理工具理解一下所谓的schema,catalog:


图1 MySql

    点击那个catalogs,下面就出来了所有的database。想了一下,我这样来总结:

    数据库:指的是说MySQL(或者说Oracle等)

    schema: 指的是说当偶create database caiceclb时,caiceclb就是一个schema

    catalog: 指的是所有的database目录,就像上图显示的那样,将MySQL原来的(mysql,infomation_schema)及后来新建的的database的集合。

SQL Server 数据库 schema 一词的不同含义

我相信一些人在进入精彩的SQL Server世界时,有一些数据库的专业术语可能会导致一些概念的混淆。一个例子就是"schema"这个词的变化。

一般来说,schema 是指数据库表的组织和定义,它们同其它表的关系以及它们所包含的列。通俗点说,它就是数据库的设计。

在SQL Server 2000中,schema 是指数据库中的对象的拥有关系(表、视图、存储过程等),它稍微区别于定义一词。对数据库对象的拥有关系是非常重要的,因为对象拥有者是被严格赋予权限 的。如果拥有关系在对象创建的过程中,没有被定义,那么对象的默认拥有者就是数据库的拥有者。在schema中叫"dbo"。

在SQL Server 2000中,大部分情况下用户和架构的拥有关系是一样的。而在 SQL Server 2005, 数据库对象架构被赋予了一个新的定义,叫“schema”。在这种情况下, schema 就是服务于逻辑对象组的物理数据库对象。对 .NET 开发者来说,它和命名空间的概念非常像。而拥有关系则被从最重要的概念中分离出来,变得更有弹性和可伸缩性。

Database object schemas are a great addition to SQL Server and in many ways is more consistent with the original definition of a schema than it's SQL Server 2000 counterpart.数据库对象架构已经成为SQL Server 的非常重要的一部分,很多情况下,它相比于SQL Server 2000中的概念来说,与初始的架构定义显得更一致。

原文链接:https://blog.csdn.net/tuyf_hs/article/details/48131769

猜你喜欢

转载自blog.csdn.net/jarniyy/article/details/80793548
今日推荐