§1.1.1关系模型
一个描述两个集合的元素如何相互联系或如何一一对应的数学概念,对于数据库来说,
关系只是一个带有一些特殊属性的表。所以有:
���数据的基础项是关系,在这些表上的操作只产生关系
一个关系表必须符合某些特定条件,才能成为关系模型的一部分
���储存在单元中的数据必须是原子的。每个单元只能存储一条数据,叫信息原则(Information
Principle)。如果存储多条则违反信息原则。特舒情况下可能需要违反信息原则。
���储存在列下的数据必须具有相同的数据类型。
���每一行是唯一的(没有完全相同的行)。
���列没有顺序。
���行没有顺序
���列有一个唯一性的名称。
关系模型的另一个是完整性原则,它包括实体完整性原则(Entityintegrityrule)和引用
完整性原则(Referentialintegrityrule),如:
���主键(Primarykey)是能唯一标识行的一列或一组列的集合。
���由多个列构成的主键称为连接键(Concatenatedkey)、组合键(Compoundkey),或称作为复合键(Compositykey)。
另外就是外部键(Foreignkey)是一个表中的一列或一组列,它们在其它表中作为主键而存在。一个表中的外部键被认为是对另外一个表中主键的引用。实体完整性原则简洁地表明主键不能全部或部分地空缺或为空,引用完整性原则简洁地表明一个外键必须为空或者它所引用的主键当前存在值相一致。
§1.2.0关系数据库系统(RDBMS)的组成
RDBMS由两部分组成,即数据库系统内核(软件)和数据字典(内核用于管理数据库系
统的数据结构)两部分。
§1.2.1RDBMS内核
RDBMS就是用来控制数据访问的操作系统。它的任务是按照一定的规则存储数据、检
索数据及保护数据。
§1.2.2数据字典概念
数据自动存放数据库中所有对象(如表,索引,视图等)所需的信息。Oracle10g的数
据字典是存放数据库系统信息的一组表,从数据字典中的信息可以确认数据库中数据对象的
基本信息及存放位置。
§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表的注释。如:
Commentontableempis'职工表';
8.USER_COL_COMMENTS列(字段)注释。如:
Commentoncolumnemp.enameis'姓名';
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提供可以用Commentoncolumntablename.columnis'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>selecttable_name,tablespace_name,initial_extent,next_extentfromuser_tables
SQL>
TABLE_NAMETABLESPACE_NAMEINITIAL_EXTENTNEXT_EXTENT
-------------------------------------------------------------
ACCESS$SYSTEM16384106496
AQ$_MESSAGE_TYPESSYSTEM6553665536
AQ$_PENDING_MESSAGESSYSTEM6553665536
......
例2.查询当前用户的索引的基本信息,包括表名、索引名及表空间、存储参数:
SQL>selectindex_name,tablespace_name,initial_extent,next_extentfromall_indexeswhereowner=user;
INDEX_NAMETABLESPACE_NAMEINITIAL_EXTENTNEXT_EXTENT
-------------------------------------------------------------------------
AQ$_MSGTYPES_PRIMARYSYSTEM6553665536
AQ$_PROPAGATION_STATUS_PRIMARYSYSTEM6553665536
AQ$_QTABLE_AFFINITIES_PKSYSTEM6553665536
AQ$_QUEUE_STATITICS_PKSYSTEM6553665536
AQ$_SCHEDULES_PRIMARYSYSTEM6553665536
ASSOC1SYSTEM1638416384
ASSOC2SYSTEM1638416384
......
这里的whereowner=user表示只查当前用户的索引.
例3.查询当前用户的索引及索引的列名:
SQL>colcolumn_namefora40
SQL>colindex_namefora18
SQL>selectindex_name,table_name,column_namefromall_ind_columns
wheretable_owner=user;
INDEX_NAMETABLE_NAMECOLUMN_NAME
-----------------------------------------------------------------
I_ACCESS1ACCESS$D_OBJ#
I_ACCESS1ACCESS$ORDER#
AQ$_MSGTYPES_PRIMARYAQ$_MESSAGE_TYPESQUEUE_OID
例4.查询当前用户的限制信息,当我们创建表结构时,如果描述了限制,则这些限制就被存放
到DBA_CONSTRAINTS数据字典中,看下面例子:
创建下面表结构:
Createtableworker
(empnonumber(4)primarykey,
namevarchar2(10),
agenumber(2)CHECK(agebetween18and65),
lodgingchar(15)ReferencesLODGING(lodging)
);
查询数据字典信息可以得到:
SQL>selectowner,constraint_name,table_namefromuser_constraints;
OWNERCONSTRAINT_NAMETABLE_NAME
-------------------------------------------------------------------
ZHAOSYS_C001009WORKER
ZHAOSYS_C001009WORKER
SQL>setlong1000
SQL>selectSEARCH_CONDITIONfromuser_constraints;
SEARCH_CONDITION
--------------------------------------------------------
agebetween18and65
例5.创建表结构时描述了限制,则这些限制就被存放到DBA_CONSTRAINTS数据字典中,再看
下面例子:
CREATETABLEdept
(deptnonumber(2),
dnamevarchar2(20),
locvarchar2(20),
CONSTRAINTpk_deptPRIMARYKEY(deptno)
);
Createtableempl
(
Empnonumber(5)primarykey,
Enamevarchar2(15)notnull,
Jobvarchar2(10),
Mgrnumber(5),
Hiredatedatedefaultsysdate,
Salnumber(7,2)CHECK(sal>100),
Commnumber(3)default0.0,
Deptnumberconstraint
dept_fkeyReferenceszhao.dept
);
SQL>colCONSTRAINT_NAMEfora12
SQL>selectconstraint_name,table_name,SEARCH_CONDITION*fromuser_constraints;
CONSTRAINT_NTABLE_NAMESEARCH_CONDITION
-------------------------------------------------------
PK_DEPTDEPT
SYS_C001013EMPL"ENAME"ISNOTNULL
SYS_C001014EMPLsal>100
SYS_C001015EMPL
DEPT_FKEYEMPL
SYS_C001009WORKERagebetween18and65
SYS_C001010WORKER
已选择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>setline120
SQL>colusernamefora26
SQL>coldefault_tablespacefora20
SQL>selectusername,DEFAULT_TABLESPACE,createdfromdba_users;
USERNAMEDEFAULT_TABLESPACECREATED
--------------------------------------------------------
SYSSYSTEM05-12月-01
SYSTEMTOOLS05-12月-01
OUTLNSYSTEM05-12月-01
DBSNMPSYSTEM05-12月-01
AURORA$JIS$UTILITY$SYSTEM05-12月-01
OSE$HTTP$ADMINSYSTEM05-12月-01
AURORA$ORB$UNAUTHENTICATEDSYSTEM05-12月-01
ORDSYSSYSTEM05-12月-01
ORDPLUGINSSYSTEM05-12月-01
MDSYSSYSTEM05-12月-01
ZHAOUSERS07-12月-01
SCOTTUSERS08-2月-02
已选择12行。
例2。查看当前已经创建了多少角色:
SQL>select*fromdba_roles;
ROLEPASSWORD
--------------------------------------
CONNECTNO
RESOURCENO
DBANO
SELECT_CATALOG_ROLENO
EXECUTE_CATALOG_ROLENO
DELETE_CATALOG_ROLENO
EXP_FULL_DATABASENO
IMP_FULL_DATABASENO
RECOVERY_CATALOG_OWNERNO
AQ_ADMINISTRATOR_ROLENO
AQ_USER_ROLENO
ROLEPASSWORD
--------------------------------------
SNMPAGENTNO
OEM_MONITORNO
HS_ADMIN_ROLENO
JAVAUSERPRIVNO
JAVAIDPRIVNO
JAVASYSPRIVNO
JAVADEBUGPRIVNO
JAVA_ADMINNO
JAVA_DEPLOYNO
TIMESERIES_DEVELOPERNO
TIMESERIES_DBANO
已选择22行。
§1.2.2与存储过程相关数据字典
user_source用户的存储过程、函数的源代码字典
all_source所有用户的存储过程、函数的源代码字典
user_errors用户的存储过程、函数的源代码存在错误的信息字典
相关的权限:
createanyprocedure
dropanyprocedure
如果某个用户没有权限来创建存储过程,则需要DBA将创建过程的权限授予某用户。如:
sql>grantcreateanyproceduretouser1;
§1.2.2包有关的数据字典
与Oracle系统的包有关的数据字典有:
DBA_SOURCE
DBA_ERRORS
1.DBA_SOURCE数据字典:
DBA_SOURCE数据字典存放有整个Oracle系统的所有包、存储过程、函数的源代码。它的列及说明如下: