数据库 schema与catalog
数据库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>下的视图而获取,具体细节不再赘述。
SQL Server 数据库 schema 一词的不同含义
我相信一些人在进入精彩的SQL Server世界时,有一些数据库的专业术语可能会导致一些概念的混淆。一个例子就是"schema"这个词的变化。 一般来说,schema 是指数据库表的组织和定义,它们同其它表的关系以及它们所包含的列。通俗点说,它就是数据库的设计。 简单来说,就是一个用户拥有的数据库的对象,比如用户Ender建立了的表,视图,存储过程等数据库对象,那就构成了schema ender。 在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中的概念来说,与初始的架构定义显得更一致。 |
catalog是由一个数据库实例的元数据组成的,包括基本表,同义词,索引,用户等等,相当于数据库的索引。
不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名,也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下,每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的数据(即schema用户自己的数据)。
服务器的本地名称.数据库名.dbo.表名
schema: 指的是说当用户create database ****时,****就是一个schema
catalog:指的是所有的database目录,将MySQL原来的(mysql,infomation_schema)及后来create database ****创建的的database的集合。
schema:
在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,这样,一个大数据库就可以根据应用把其表分开来管理。
不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名,也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下,每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的数据(即schema用户自己的数据。
catalog: 指的是所有的database目录
两者关系:
从概念上说,一个数据库系统包含多个 Catalog,每个Catalog又包含多个Schema,而每个Schema又包含多个数据库对象(表、视图、字段等),反过来讲一个数据库对象必然属于一个Schema,而该Schema又必然属于一个Catalog,这样我们就可以得到该数据库对象的完全限定名称从而解决命名冲突的问题了;例如数据库对象表的完全限定名称就可以表示为:Catalog名称.Schema名称.表名称。这里还有一点需要注意的是,SQL标准并不要求每个数据库对象的完全限定名称是唯一的,就象域名一样,如果喜欢的话,每个IP地址都可以拥有多个域名