1. 设计表
1) 规划表、列、索引和簇时,这些对象应该使用有意义的名称。
2) 规划表明和列名时,要使用一致的缩写格式、单数或复数格式。
3) 为了给用户和其他人员提供有意义的帮助信息,应该使用COMMENT命令描述表、列的作用。
4) 设计表时,应该使用第一范式、第二范式、第三范式规范化每张数据库表。
5) 定义表列时,应该选择合适的数据类型和长度。
6) 定义表列时,为了节省存储空间,应该将NULL列放到后面。
7) 在合适的情况下使用簇表以节省存储空间并提高SQL语句的性能。
2. 规划表的类型
1) 普通表:数据以无序方式存放在单独的表段中,该种表是最基础、最常用的数据库表类型。
2) 簇表:簇由共享相同数据块的一组表组成,在合适的情况下使用簇表可以节省存储空间并提高SQL语句性能。
3) 索引表:数据以B-树结构存放在主键约束所对应的索引段中。使用索引表时,索引叶块不仅包含了健列的数据,也包含了其他非健列的数据。
4) 分区表:数据被划分为更小的部分,并且存储到相应的分区段中,每个分区段可以独立管理和操作。
3. 规划表的位置
如果建表时不指定TABLESPACE选项,Oracle会将表段建立在用户的默认表空间中,通过指定TABLESPACE选项,可以将表段建立在其他表空间。需要注意,如果要在特定表空间上建表,用户必须具有相应表空间配额或具有UNLIMITED TABLESPACE系统权限。当规划表的存放位置时,应该注意以下事项:
1) 如果将用户对象放到SYSTEM表空间中,将会影响数据库性能。因此Oracle建议不要在SYSTEM表空间上存放用户对象。为了避免将用户对象建立在SYSTEM表空间上,建议数据库管理员必须指定每个用户的默认表空间。
2) 设计应用系统时,应该规划存放应用对象的表空间,不要将用户对象随意分布到各个表空间,以避免增加用户对象的管理时间。
4. 使用并行方式建表
使用子查询(AS SELECT)建表时,在多cpu环境下,应使用并行方式建表,以提高性能。
5. 使用NOLOGGING选项建表
使用子查询建表时,通过制定NOLOGGING选项,可以最小化建表所生成的重做信息,从而提高建表性能。
6. 使用COMPRESS选项建表
使用Oracle的表压缩特征时,Oracle会将同一个数据块中行和列的重复数据放在数据块的头部,压缩了表数据,从而节省了表的存储空间。因为表压缩特征会降低磁盘和内存占用,所以可以有效的提高查询操作的性能。
7. ROWID 表的伪列,它用于唯一标识表列。ROWID间接给出了表列的物理位置,它是定位表列的最快方式。
8. 常用修改表的SQL命令
1) 修改列定义 ALTER TABLE department MODIFY loc VARCHAR2(15) DEFAULT ‘BeiJing’;需要注意,如果要算段CHAR类型列的长度,如果该表已经包含数据,就必须将初始化参数blank_trimming设置为true。
2) 增加列 ALTER TABLE department ADD remark VARCHAR(300) DEFAULT ‘GOOD’
3) 修改列名 ALTER TABLE department RENAME COLUMN loc to location;
4) 删除列 ALTER TABLE emp DROP COLUMN comm;
ALTER TABLE emp DROP COLUMN (comm.,phone);
5) 使用UNUSED选项删除列。如果该列已经包含大量数据,删除列的时间会很长。为了不影响性能,可以现将其标记为unused,然后在数据库空闲阶段删除表列。