一个描述两个集合的元素如何相互联系或如何一一对应的数学概念,对于数据库来说,
关系只是一个带有一些特殊属性的表。所以有:
? 数据的基础项是关系,在这些表上的操作只产生关系
一个关系表必须符合某些特定条件,才能成为关系模型的一部分
? 储存在单元中的数据必须是原子的。每个单元只能存储一条数据,叫信息原则(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 ),
/* age number(2) CHECK( age >=18 and age<=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 �C实例中所有的视图的基本信息;
? DBA_SYNONYMS �C实例中所有的同义词;
? DBA_SEQUENCES �C实例中所有的序列。
§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
SYSTEM TOOLS
OUTLN SYSTEM
DBSNMP SYSTEM
AURORA$JIS$UTILITY$ SYSTEM
OSE$HTTP$ADMIN SYSTEM
AURORA$ORB$UNAUTHENTICATED SYSTEM
ORDSYS SYSTEM
ORDPLUGINS SYSTEM
MDSYS SYSTEM
ZHAO USERS
SCOTT USERS
已选择 12 行。
例2。查看当前已经创建了多少角色:
SQL> select * from dba_roles;
ROLE PASSWORD
------------------------------ --------
CONNECT NO
RESOURCE NO
DBA NO
SELECT_CATALOG_ROLE NO
EXECUTE_CATALOG_ROLE NO
DELETE_CATALOG_ROLE NO
EXP_FULL_DATABASE NO
IMP_FULL_DATABASE NO
RECOVERY_CATALOG_OWNER NO
AQ_ADMINISTRATOR_ROLE NO
AQ_USER_ROLE NO
ROLE PASSWORD
------------------------------ --------
SNMPAGENT NO
OEM_MONITOR NO
HS_ADMIN_ROLE NO
JAVAUSERPRIV NO
JAVAIDPRIV NO
JAVASYSPRIV NO
JAVADEBUGPRIV NO
JAVA_ADMIN NO
JAVA_DEPLOY NO
TIMESERIES_DEVELOPER NO
TIMESERIES_DBA NO
已选择22 行。
§1.2.2 与存储过程相关数据字典
user_source 用户的存储过程、函数的源代码字典
all_source 所有用户的存储过程、函数的源代码字典
user_errors 用户的存储过程、函数的源代码存在错误的信息字典
相关的权限:
create any procedure
drop any procedure
如果某个用户没有权限来创建存储过程,则需要 DBA 将创建过程的权限授予某用户。如:
sql>grant create any procedure to user1;
§1.2.2 包有关的数据字典
与 Oracle 系统的包有关的数据字典有:
DBA_SOURCE
DBA_ERRORS