|
| |
精品推荐 |
 |
|
| |
|
|
|
|
Oracle9i数据库设计指引全集二
|
日期:2007年7月2日 作者: 查看:[大字体
中字体 小字体]
|
2.4.4 视图设计 视图是虚拟的数据库表,在使用时要遵循以下原则: 从一个或多个库表中查询部分数据项; 为简化查询,将复杂的检索或字查询通过视图实现;
提高数据的安全性,只将需要查看的数据信息显示给权限有限的人员; 视图中如果嵌套使用视图,级数不得超过3级; 由于视图中只能固定条件或没有条件,所以对于数据量较大或随时间的推移逐渐增多的库表,不宜使用视图;可以采用实体化视图代替。 除特殊需要,避免类似Select * from [TableName] 而没有检索条件的视图; 视图中尽量避免出现数据排序的SQL语句。 2.4.5 包设计 存储过程、函数、外部游标必须在指定的数据包对象PACKAGE中实现。存储过程、函数的建立如同其它语言形式的编程过程,适合采用模块化设计方法;当具体算法改变时,只需要修改需要存储过程即可,不需要修改其它语言的源程序。当和数据库频繁交换数据是通过存储过程可以提高运行速度,由于只有被授权的用户才能执行存储过程,所以存储过程有利于提高系统的安全性。 存储过程、函数必须检索数据库表记录或数据库其他对象,甚至修改(执行Insert、Delete、Update、Drop、Create等操作)数据库信息。如果某项功能不需要和数据库打交道,则不得通过数据库存储过程或函数的方式实现。在函数中避免采用DML或DDL语句。 在数据包采用存储过程、函数重载的方法,简化数据包设计,提高代码效率。存储过程、函数必须有相应的出错处理功能。 2.4.6 安全性设计 4.4.6.1 管理默认用户 在生产环境中,必须严格管理sys和system用户,必须修改其默认密码,禁止用该用户建立数据库应用对象。删除或锁定数据库测试用户scott 。 2.4.6.2 数据库级用户权限设计 必须按照应用需求,设计不同的用户访问权限。包括应用系统管理用户,普通用户等,按照业务需求建立不同的应用角色。 用户访问另外的用户对象时,应该通过创建同义词对象synonym进行访问。 2.4.6.3 角色与权限 确定每个角色对数据库表的操作权限,如创建、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。 2.4.6.4 应用级用户设计 应用级的用户帐号密码不能与数据库相同,防止用户直接操作数据库。用户只能用帐号登陆到应用软件,通过应用软件访问数据库,而没有其它途径操作数据库。 2.4.6.5 用户密码管理 用户帐号的密码必须进行加密处理,确保在任何地方的查询都不会出现密码的明文。 2.5 SQL编写 2.5.1 字符类型数据 SQL中的字符类型数据应该统一使用单引号。特别对纯数字的字串,必须用单引号,否则会导致内部转换而引起性能问题或索引失效问题。利用trim(),lower()等函数格式化匹配条件。 2.5.2 复杂sql 对于非常复杂的sql(特别是有多层嵌套,带子句或相关查询的),应该先考虑是否设计不当引起的。对于一些复杂SQL可以考虑使用程序实现。 USER_TAB_COMMENTS 数据字典 Comment on 可加注解 2.5.3 高效性 2.5.3.1 避免In子句 使用In 或 not In子句时,特别是当子句中有多个值时,且查询数据表数据较多时,速度会明显下降。可以采用连接查询或外连接查询来提高性能。 Char 比 varchar 查询时高询 在进行查询及建立索引时,char比varchar的效率要高,当然varchar在存储上比char要好 2.5.3.2 避免嵌套的Select子句 这个实际上是In子句的特例。 2.5.3.3 避免使用Select * 语句 如果不是必要取出所有数据,不要用*来代替,应给出字段列表,注:不含select count(*)。 2.5.3.4 避免不必要的排序 不必要的数据排序大大的降低系统性能。 2.5.4 健壮性 2.5.4.1 Insert语句 使用Insert语句一定要给出要插入值的字段列表,这样即使更改了表结构加了字段也不会影响现有系统的运行。
上一篇:关于使用PRO*C编程的一些简单说明和例子
下一篇:用JAVA实现ORACLE的文件上传,下载
|
| Oracle9i数据库设计指引全集二 相关文章: |
|
|
|
| Oracle9i数据库设计指引全集二 相关软件: |
|
|
|
|