现在的位置: 首页 > 综合 > 正文

数据字典

2013年09月08日 ⁄ 综合 ⁄ 共 6257字 ⁄ 字号 评论关闭

§1.1.1 关系模型

一个描述两个集合的元素如何相互联系或如何一一对应的数学概念,对于数据库来说,

关系只是一个带有一些特殊属性的表。所以有:

��� 数据的基础项是关系,在这些表上的操作只产生关系

一个关系表必须符合某些特定条件,才能成为关系模型的一部分

��� 储存在单元中的数据必须是原子的。每个单元只能存储一条数据,叫信息原则(Information

Principle)。如果存储多条则违反信息原则。特舒情况下可能需要违反信息原则。

��� 储存在列下的数据必须具有相同的数据类型。

��� 每一行是唯一的(没有完全相同的行)。

��� 列没有顺序。

��� 行没有顺序

��� 列有一个唯一性的名称。

 

关系模型的另一个是完整性原则,它包括实体完整性原则(Entity integrity rule)和引用

完整性原则( Referential integrity rule ),如:

��� 主键( Primary key )是能唯一标识行的一列或一组列的集合。

��� 由多个列构成的主键称为连接键(Concatenated key)、组合键(Compound key ),或称作为复合键(Composity key )。

另外就是外部键(Foreign key )是一个表中的一列或一组列,它们在其它表中作为主键而存在。一个表中的外部键被认为是对另外一个表中主键的引用。实体完整性原则简洁地表明主键不能全部或部分地空缺或为空,引用完整性原则简洁地表明一个外键必须为空或者它所引用的主键当前存在值相一致。

§1.2.0 关系数据库系统(RDBMS)的组成

RDBMS 由两部分组成,即数据库系统内核(软件)和数据字典(内核用于管理数据库系

统的数据结构)两部分。

§1.2.1 RDBMS 内核

RDBMS 就是用来控制数据访问的操作系统。它的任务是按照一定的规则存储数据、检

索数据及保护数据。

§1.2.2 数据字典概念

数据自动存放数据库中所有对象(如表,索引,视图等)所需的信息。Oracle 10g的数

据字典是存放数据库系统信息的一组表,从数据字典中的信息可以确认数据库中数据对象的

基本信息及存放位置。

§1.2.2 常用数据字典简介

ORACLE 提供许多内部数据字典, 用以管理系统的各种信息和参数(即数据库对象),下面列出几个常用的数据字典供初学者参考。

ORACLE 数据字典的命名说明:

USER 为前缀----记录用户的所有对象信息

ALL 为前缀----记录包括 USER 记录和授权给PUBLIC 或该用

户的所有对象的信息。

DBA 为前缀----记录关于数据库对象(非用户对象)的信息。

V$ 公共系统动态视图,用于系统优化和调整参考.

V_$ 动态性能视图

注:请注意下面的总结:

��� 一般 DBA_ 的视图内容都包含USER_和ALL_为前缀的视图;

��� DBA_为前缀的视图的内容基本上是大写;

��� 以 V$_为前缀的视图的内容基本上是小写。

 

1. USER_TABLEs(=TABS) 用户的所有表的信息。

2.USER_TAB_COLUMNS(=COLS) 有关各表的列(字段)的信息

3.USER_VIEWS 用户的所有视图

4.USER_SYNONYMS(=SYN) 用户同义词

5.USER_SEQUENCES(=SEQ) 用户序列

6.USER_CONSTRAINTS 记录创建表结构时建立的限制。

7.USER_TAB_COMMENTS 表的注释。如:

Comment on table emp is '职工表';

8. USER_COL_COMMENTS 列(字段)注释。如:

Comment on column emp.ename is '姓名';

9. USER_INDEXES(=IND) 用户索引的简要信息

10. USER_IND_COLUMNS 用户索引的列信息

11. USER_TRIGGERS 用户触发器信息

12. USER_SOURCE 用户存储过程

13. USER_TABLESPACE 用户可以使用的表空间信息

14. USER_TS_QUOTAS 用户使用系统资源的信息

15. USER_SEGMENTS 用户对象所使用空间信息

16. USER_EXTENTS 用户的扩展段信息

17. USER_OBJECTS 用户对象

=USER_TABLES+USER_VIEWS+USER_INDEXES+

USER_SOURCE+USER_TRIGGERS+USER_JAVA

18. USER_PART_TABLES 用户分区信息

19. USER_TAB_PARTITIONS

20. USER_PART_COL_STATISTICS

21. USER_IND_PARTITIONS

22. USER_FREE_SPACE

23. CAT(=USER_CATALOG) 用户可以访问的所有的基表。

24. TAB 用户创建的所有基表,视图,同义词等。

25. DICT(=DICTIONARY) 构成数据字典的所有表的信息。

提示:虽然Oracle 提供可以用Comment on column tablename.column is 'xxxx'; 等来实现对表或列进行注释,但不建议设计者采用这样的工作方式。而建议将注释写到脚本中更为直观。

 

§1.2.2 表和索引数据字典

DBA_TABLES,ALL_TABLES,USER_TABLES 存放表的基本信息,主要包括创建表结构时描述

的信息,如表名,表空间,存储参数等;此外,还有一些信息是在分析表时由系统 自动

写进去的,比如,表的行数量、行平均字节等。

��� DBA_INDEXES,ALL_INDEXES,USER_INDEXES 存放索引的基本信息,主要包括创建索引时描

述的信息和用ANALYZE 分析索引由系统自动写进去的信息。

��� DBA_IND_COLUMNS 存放有索引的列的信息,因为Oracle 在分析创建索引的命令正确后

就将表名、索引名等存放到DBA_INDEXES 数据字典中,而将索引的列名存放到

DBA_IND_COLUMNS 数据字典中。所以,查询者需要了解两个数据字典才能查到索引的详细

信息。

��� ALL_CONSTRAINTS 存放表的限制信息。

��� ALL_CONS_COLUMNS 存放表的列的限制信息。

 

了解数据字典的目的就是查询有关表和索引的信息,下面是简单的查询例子。

例1.查询当前用户的表的基本信息,包括表名、存放的表空间、存储参数:

SQL> select table_name ,tablespace_name,initial_extent,next_extent from user_tables

SQL>

TABLE_NAME TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT

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

ACCESS$ SYSTEM 16384 106496

AQ$_MESSAGE_TYPES SYSTEM 65536 65536

AQ$_PENDING_MESSAGES SYSTEM 65536 65536

. . . . . .

 

例2.查询当前用户的索引的基本信息,包括表名、索引名及表空间、存储参数:

SQL> select index_name,tablespace_name,initial_extent,next_extent from all_indexes where owner=user;

INDEX_NAME TABLESPACE_NAME INITIAL_EXTENT NEXT_EXTENT

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

AQ$_MSGTYPES_PRIMARY SYSTEM 65536 65536

AQ$_PROPAGATION_STATUS_PRIMARY SYSTEM 65536 65536

AQ$_QTABLE_AFFINITIES_PK SYSTEM 65536 65536

AQ$_QUEUE_STATITICS_PK SYSTEM 65536 65536

AQ$_SCHEDULES_PRIMARY SYSTEM 65536 65536

ASSOC1 SYSTEM 16384 16384

ASSOC2 SYSTEM 16384 16384

. . . . . .

这里的where owner=user 表示只查当前用户的索引.

 

例3.查询当前用户的索引及索引的列名:

SQL> col column_name for a40

SQL> col index_name for a18

SQL> select index_name,table_name,column_name from all_ind_columns

where table_owner=user;

INDEX_NAME TABLE_NAME COLUMN_NAME

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

I_ACCESS1 ACCESS$ D_OBJ#

I_ACCESS1 ACCESS$ ORDER#

AQ$_MSGTYPES_PRIMARY AQ$_MESSAGE_TYPES QUEUE_OID

 

例4.查询当前用户的限制信息,当我们创建表结构时,如果描述了限制,则这些限制就被存放

到DBA_CONSTRAINTS 数据字典中,看下面例子:

创建下面表结构:

Create table worker

( empno number(4) primary key,

name varchar2(10),

age number(2) CHECK(age between 18 and 65 ),

 

lodging char(15) References LODGING(lodging)

);

查询数据字典信息可以得到:

SQL> select owner,constraint_name,table_name from user_constraints;

OWNER CONSTRAINT_NAME TABLE_NAME

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

ZHAO SYS_C001009 WORKER

ZHAO SYS_C001009 WORKER

SQL> set long 1000

SQL> select SEARCH_CONDITION from user_constraints;

SEARCH_CONDITION

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

age between 18 and 65

例5.创建表结构时描述了限制,则这些限制就被存放到DBA_CONSTRAINTS 数据字典中,再看

下面例子:

CREATE TABLE dept

(deptno number(2),

dname varchar2(20),

loc varchar2(20),

CONSTRAINT pk_dept PRIMARY KEY (deptno)

);

Create table empl

(

Empno number(5) primary key,

Ename varchar2(15) not null,

Job varchar2(10),

Mgr number(5),

Hiredate date default sysdate,

Sal number(7,2) CHECK(sal>100),

Comm number(3) default 0.0 ,

Dept number constraint

dept_fkey References zhao.dept

);

SQL> col CONSTRAINT_NAME for a12

SQL> select constraint_name,table_name,SEARCH_CONDITION * from user_constraints;

CONSTRAINT_N TABLE_NAME SEARCH_CONDITION

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

PK_DEPT DEPT

SYS_C001013 EMPL "ENAME" IS NOT NULL

SYS_C001014 EMPL sal>100

SYS_C001015 EMPL

DEPT_FKEY EMPL

SYS_C001009 WORKER age between 18 and 65

SYS_C001010 WORKER

已选择7 行。__

§1.2.2 视图、同义词和序列有关的数据字典

当我们创建了视图、同义词和序列后,相关的信息就被记录到Oracle 的数据字典中,作为程序人员和数据库管理员,应该了解有关数据字典的基本查询方法.

与视图、同义词和序列有关的数据字典有:

��� DBA_VIEWS 实例中所有的视图的基本信息;

��� DBA_SYNONYMS 实例中所有的同义词;

��� DBA_SEQUENCES 实例中所有的序列。

 

§1.2.2 与用户、角色与权限有关的数据字典

与用户、角色、权限有关的数据字典主要有:

DBA_USERS 实例中有效的用户及相应信息。

V$SESSION 实例中会话的信息。

DBA_ROLES 实例中已经创建的角色的信息。

ROLE_TAB_PRIVS 授予角色的对象权限。

ROLE_ROLE_PRIVS 授予另一角色的角色。

ROLE_SYS_PRIVS 授予角色的系统权限。

DBA_ROLE_PRIVS 授予用户和角色的角色。

SESSION_ROLES 用户可用的角色的信息。

 

对于一般的软件人员来说,应该掌握对数据字典的基本查询,如:

 1。查看当前已经创建了多少用户和用户缺省的表空间:

SQL> set line 120

SQL> col username for a26

SQL> col default_tablespace for a20

SQL> select username,DEFAULT_TABLESPACE,created from dba_users;

USERNAME DEFAULT_TABLESPACE CREATED

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

SYS SYSTEM 05-12 -01

SYSTEM TOOLS 05-12 -01

OUTLN SYSTEM 05-12 -01

DBSNMP SYSTEM 05-12 -01

AURORA$JIS$UTILITY$ SYSTEM 05-12 -01

OSE$HTTP$ADMIN SYSTEM 05-12 -01

AURORA$ORB$UNAUTHENTICATED SYSTEM 05-12 -01

抱歉!评论已关闭.