数据字典和SQlDA


解决问题:动态SQL,依据条件动态构造SQL语句,但不知道欲访问的表名和字段名

1.数据字典(系统目录)

  (1)数据字典是系统维护的一些表或视图集合,这些表或视图存储了数据库中各类对象的定义信息,这些对象包括用Create语句定义的表,列,索引,视图,权限,约束等,这些信息又称数据库的元数据--关于数据的数据

  (2)不同的DBMS对数据字典的称呼不同:数据字典,目录表,系统目录,系统视图

  (3)不同的DBMS对系统目录的存储方式不同,有一些信息对DBA公开,利用这些公开信息,DBA可以使用一些特殊的SQL命令来检索

2.数据字典的内容构成

  (1)数据字典通常存储的是数据库和表的元数据,即模式本身的信息

  //应用程序员构造动态SQL需要的信息

  (2)与关系相关的信息

    1)关系名字

    2)每一个关系的属性名及其类型

    3)视图的名字及其定义

    4)完整性约束

  (3)用户和账户信息,包括密码

  //数据库管理系统实现算法需要的信息

  (4)统计与描述性数据:如每个关系中的元组数目

  (5)物理文件组织信息

    1)关系是如何存储的(顺序,无需,散列)

    2)关系的物理位置

  (6)索引相关的信息

3.数据字典的结构

  (1)数据字典是存储在磁盘上的关系,专为内存高效访问设计的特定的数据结构

  (2)可能的数据字典结构

    1)Relation_metadata = (relation_name, number_of_attributes, storage_organization, location)

    2)Attribute_metadata = (attribute_name, relation_name, domain_type, position, length)  

    //属性的元数据,属性名,属于那个关系,属性的域的类型,关系中的类型,长度

    3)User_metadata = (user_name, encrypted_password, group)

    //用户的元数据,用户名,密码,属于哪个组

    4)Index_metadata = (index_name, relation_name, index_type, index_attributes)

    5)View_metadata = (view_name, definition)

    //视图的元数据,视图名,视图定义

4.X/Open标准的系统目录

  (1)X/Open标准中有一个目录表Info_Schem.Tables该表中的一行是一个已经定义的表的有关信息

    1)Table_Schem:表的模式名(通常是表所有者的用户名)

    2)Table_Name:表名

    3)Table_Type:“Base_Table”或“View”

  (2)模式:指某一用户设计和使用的表,索引及其他与数据库有关的对象的集合,因此表的完整名:模式名.表名。这样做可允许不同用户使用相同的表名,而不混淆

  (3)一般而言,一个用户有一个模式,可以使用 Create Schema 语句来创建模式,在 Create Table 等语句可以使用所定义的模式名称

  (4)可以使用SQL语句来检索访问表中的信息

    Select Table_Name From Tables;

5.Oracle的数据字典

  (1)Oracle数据字典由视图组成,分为三种不同形式,由不同的前缀标识

    1)USER_ :用户视图,用户所拥有的对象,在用户模式中

    2)ALL_ :扩展的用户视图,用户可访问的视图

    3)DBA_:DBA视图(所有用户都可访问的DAB对象的子集)

  (2)Oracle数据字典定义了三个视图(可以用来了解相关表的信息:表的拥有者(模式),表名,其他信息)

    1)USER_Tables

    2)ALL_Tables

    3)DBA_Tables

  (3)Oracle数据字典也定义了三个视图(用来了解相关表的列的信息:表的拥有者,表名,列名,列的数据类型,数据长度,其他信息)

    1)USER_TAB_Columns

    2)ALL_TAB_Columns

    3)DBA_TAB_Columns

  (4)Oracle还定义了一些其他视图。。。

  (5)SQL语句访问表的信息

    Select Column_Name From ALL_TAB_Columns Where Table_Name = 'STUDENT';  //检索Student表中有哪些列

6.SQLDA

  (1)构造复杂动态SQL需要数据字典和SQLDA

  (2)SQLDA

    1)SQLDA:SQL  Descriptor  Area,SQL描述符区域

    2)SQLDA是一个内存数据结构,内可装载关系模式的定义信息,如列的数据,每一列的名字和类型等等

    3)不同DBMS提供的SQLDA模式并不一致,通过查询DBMS的手册可以更详细的理解