日期:2014-05-16  浏览次数:20573 次

创建与管理表
创建与管理表
以上几次总结中我主要介绍了Oracle的查询操作及组函数、group by字句 having子句等基本内容这一节我将继续介绍Oracle表的一些基本概念及使用方式,希望能够对学习数据库同学有所帮助,以后我将会继续总结oracle的一些知识,总结的知识内容自认为比较全面、实用,希望大家能够有所收益。下面我们来学习oracle的用户、模式和表。
Oracle是通过“模式”来组织和管理这些数据库对象的。Oracle系统中的模式是一系列逻辑数据结构或对象的集合,一个模式只能够被一个数据库用户所拥有,并且模式名称与该用户的名称相同。

    数据库中对象包括:表、视图、索引、序列、同义词等。
? 表:基本的数据存储的集合,由行与列组成
? 视图:从表中抽出的逻辑上相关的数据集合。
? 序列: 提供有规律的数值
? 索引:提高查询效率
? 同义词:给对象起的别名。

Oracle数据库中的表
1、 用户自定义表
表名和列名的命名规范:
? 必须以字母开头
? 必须在 1–30 个字符之间
? 必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
? 必须不能和用户定义的其他对象重名
? 必须不能是Oracle 的保留字

创建表必须具备的条件:
? 必须具备:
CREATE TABLE权限
存储空间
? 必须指定:
表名
列名, 数据类型, 尺寸

创建表的语法
      CREATE TABLE [schema.]table
    (column datatype [DEFAULT expr][, ...]);

数据类型如下:

数据类型 描述
VARCHAR2(size) 可变长字符数据
CHAR(size) 定长字符数据
NUMBER(p,s) 可变长数值数据
DATE 日期型数据
LONG 可变长字符数据,最大可达到2G
CLOB 字符数据,最大可达到4G
RAW (LONG RAW) 原始的二进制数据
BLOB 二进制数据,最大可达到4G
BFILE 存储外部文件的二进制数据,最大可达到4G
ROWID 行地址


创建表的分析:
       在数据库中必须遵循一定的规范 这些规范称为范式.目前关系数据库有6种方式,数据库只需要满足3NF即可,需要使用范式对数据库中表进行处理.

下面我以学生信息为例分析:
   学号,学生姓名,出生日期,学生性别,所属班级,所属院系,系主任姓名,课程编号,成绩.
分析:
   学号:sid          数据类型 varchar2
   学生姓名:sname
   出生日期:sbirth    date
   学生性别:ssex      
   所属班级:sclass
   所属院系:sdep
   系主任姓名:dname
   课程编号:cid
   成绩 grade         number(5,2)
创建学生信息表
根据如上信息可以创建存储的表 学生信息表  包含医以上的全部信息,但非规范。

分析设计过程:
       必须满足3NF范式 但前提必须满足1,2NF
1、 属性不可再分(1NF) ==?一对多关系
学生信息表:Sid,sname,sbirth,ssex,sclass,sdep,dname
成绩表: sid cid grade
2、 (前提必须满足1NF )表中的所有非主属性都完全依赖于任一候选键。
Sid->Sname
sid->sbirth
sid->ssex
sid->sclass
sdep->dname
--?其他普通属性不应当存在部分依赖于主要属性->此普通属性应当被分离到新的表中去
s(sid,sname,sbirth,ssex,sclass,sdep)
d(sdep,dname)
g(sid,cid,grade)


3、 (前提满足2NF)表中的每一个非主属性都不传递依赖于任何候选键。

s(sid,sname,sbirth,ssex,sclass,sdep)
d(sdep,dname)
g(sid,cid,grade)

在满足2NF后 分析:
Sid->sclass
Sclass->sdep
Sid->sdep
s(sid,sname,sbirth,ssex,sclass)
cd(sclass,sdep)
d(sdep,dname)
g(sid,cid,grade)

2、 Oracle数据字典
2.1查询用户自定义表
         //查询用户定义的表的名称
SQL> select table_name from user_tables;
//查询用户自定表的详细特征
SQL> select * from user_tables
//等效于
SQL> select * from tabs;

2.2查询用户定义的各种数据库对象
SQL> select distinct object_type from user_objects;
OBJECT_TYPE
-------------------
INDEX PARTITION
SEQUENCE
QUEUE
TABLE PARTITION
PROCEDURE
LOB
PACKAGE
PACKAGE BODY
TRIGGER
SYNONYM
TABLE
INDEX
VIEW
TYPE

14 rows selected
2.3 查看用户定义的表、视图、序列和同义词
SQL> select * from user_catalog;

TABLE_NAME              TABLE_TYPE
------------------------------ -----------
USESS                       TABLE
ABC                          TABLE
DEPT