zoukankan      html  css  js  c++  java
  • 数据库 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中的概念来说,与初始的架构定义显得更一致。

     
    schema是对一个数据库的结构描述。在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。

    catalog是由一个数据库实例的元数据组成的,包括基本表,同义词,索引,用户等等,相当于数据库的索引。
    在一个数据库中可以有多个应用的数据表,这些不同应用的表可以放在不同的schema之中,同时,每一个schema对应一个用户,不同的应用可以以不同的用户连接数据库,这样,一个大数据库就可以根据应用把其表分开来管理。
    不同的schema之间它们没有直接的关系,不同的shcema之间的表可以同名,也可以互相引用(但必须有权限),在没有操作别的schema的操作根权下,每个用户只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的数据(即schema用户自己的数据)。
     
    catalog,数据库名,schema,表名,
    服务器的本地名称.数据库名.dbo.表名
    DBO是每个数据库的默认用户,具有所有者权限,即DbOwner
    通过用DBO作为所有者来定义对象,能够使数据库中的任何用户引用而不必提供所有者名称。
    比如:你以User1登录进去并建表Table,而未指定DBO,
    当用户User2登进去想访问Table时就得知道这个Table是你User1建立的,要写上User1.Table,如果他不知道是你建的,则访问会有问题。
    如果你建表时把所有者指给了Dbo,则别的用户进来时写上Dbo.Table就行了,不必知道User1。
    不光表是如此,视图等等数据库对象建立时也要如此才算是好。
     
    建表、存储过程、视图等数据库对象时,其对应的所有者是创建它的用户。则除了该用户其他登录用户要引用这些东东时,都要加上前缀,很是麻烦。而且,程序因此易出错,你查来查去问题确出在这,浪费你时间。
     

    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地址都可以拥有多个域名

    在Oracle中,一个用户就是一个Schema,表都是建立在Schema中的,也可以理解为每个用户拥有不同的表。一个用户想访问另外一个用户,也就是另外一个schema的表的时候,可以用 username.tablename的形式来访问,完全不需要分布式事务。
     
    当你在 SQL Server 里面, 使用 create database  创建一个数据库以后。
    你可以不必额外的去创建 schema,因为 SQL Server 会 自动的创建一个 名字叫  dbo  的 schema

    SQL/MX Catalogs

    An SQL/MX catalog is a named logical object that contains descriptions of a set of
    schemas. You can access SQL/MX objects with the three-part name of the actual
    object.

    A catalog is owned by the user ID that created it, though catalog ownership does not
    imply authorization over schemas or objects in that catalog, and any user can drop an
    empty catalog, regardless who the catalog owner is. Each of the schemas described in
    a catalog has an owner. A catalog can contain multiple schemas, each possibly owned
    by a different user. A catalog cannot contain other catalogs. Any user on a node can
    create a catalog on that node. The catalog’s owner has the authority to register and
    unregister the catalog.

    SQL/MP Catalogs

    An SQL/MP catalog is a set of tables and indexes that describe SQL objects. Tables in
    the set are called catalog tables and NonStop SQL/MP creates them, along with their
    indexes, when you execute a CREATE CATALOG statement. Each catalog resides on
    its own Guardian subvolume, and the name of that subvolume is also the name of the
    catalog.
    A catalog name has the form:
    [ ode .][$ volume .] subvol

    Each node on which NonStop SQL/MP is used has one special catalog called the
    system catalog and might have many other catalogs. Each table, view, index, partition,
    collation, or catalog table located on a node must be described in a catalog on the
    same node. For more information.

     
     





  • 相关阅读:
    JAVA LinkedList和ArrayList的使用及性能分析
    学习笔记—Node中的模块调试
    学习笔记—Node的核心模块
    学习笔记—Node中VM模块详解
    学习笔记—Node中require的实现
    入园了
    【引用】asp.net服务器推送(ServerPush)和客户端拉拽技术
    ajax xmlHttp.responseXML取不到值问题备忘
    oracle实时插值速度突然变慢问题解决办法
    [转帖 作者: fuyuncat 来源: www.HelloDBA.com ]Oracle IO问题解析
  • 原文地址:https://www.cnblogs.com/ECNB/p/4611309.html
Copyright © 2011-2022 走看看