Oracle学习笔记第二十天

Oracle学习笔记第二十天

数据库设计

概念:规划数据库中数据对象以及之间关系的过程

为什么进行数据库设计:

   	1. 空间
    	2. 完整性:实体完整性、域完整性、用户自定义的完整性
     	3. 程序开发:方便程序开发

范式:

1NF:第一范式:

​ 如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

​ 第一范式的目标是确保每列的原子性

2NF:第二范式

​ 如果一个关系满足1NF,并且除了主键以为的其他列都依赖与该主键,则满足第二范式(2NF)

​ 第二范式要求每个表值描述一件事情

3NF:第三范式

​ 如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式。

数据库设计步骤:

   	1. 收集信息
    	2. 标识对象
     	3. 标识对象的属性
     	4. 标识对象之间的关系

为了设计结构良好的数据库,需要遵守一些专门的规则,称为数据库的设计范式

​ 第一范式(1NF)的目标:确保每列的原子性

​ 第二范式(2NF)的目标:确保表中的每列,都和主键相关

​ 第三范式(3NF)的目标:确保每列都和主键列直接相关,而不是间接相关

练习用例:

收集信息:
  公司承担多个工程项目,每一项工程有:工程号、工程名称、施工人员等
  公司有多名职工,每一名职工有:职工号、姓名、性别、职务(工程师、技术员)等
  公司按照工时和小时工资率支付工资,小时工资率由职工的职务决定(例如,技术员的小时工资率与工程师不同)
  工资报表
工程号 工程名称 职工号 姓名 职务 小时工资率 工时
A1 花园大厦 1001 齐光明 工程师 65 13
A1 花园大厦 1002 李思岐 技术员 60 16
A2 立交桥 1001 齐光明 工程师 65 13
A2 立交桥 1003 鞠明亮 工人 55 17
A3 临江饭店 1002 李思岐 技术员 60 18
A3 临江饭店 1004 葛宇洪 技术员 60 14

标识对象
标识对象2

标识对象3

SQL优化

一般优化技巧

  1. 建议不用“*”代替所有列名
  2. 删除所有数据用TRUNCATE代替DELETE
  3. 用NOT EXISTS 代替NOT IN
  4. 用EXISTS代替IN
  5. 用EXISTS代替DISTINCT
  6. where子句的连接顺序:1. 表连接关系放在前面;2. 过滤记录越多的条件子句应放置到后面

索引

索引分类:

逻辑分类 物理分类
单列或组合索引 分区或非分区索引
唯一或非唯一索引 B 树索引
基于函数索引 正常或反向键索引
位图索引

其他索引: 唯一索引、反向键索引、位图索引、组合索引、函数索引等

创建索引原则:

  1. 频繁搜索的列
  2. 经常排序、分组的列
  3. 经常连接的列
  4. 指定单独的表空间

不适合建立索引原则:

  1. 数据量小
  2. 仅包含几个不同值的列
  3. 数据表操作特别频繁、业务性能要求高

表分区

概念:把表中数据划分成若干部分,并存储在不同的位置

优点:

  1. 改善查询性能
  2. 表更容易管理
  3. 便于备份和恢复
  4. 提高数据安全性

表分区分类:

  1. 范围分区
    • 列值的范围作为划分条件
  2. 散列分区
    • 列的hash值自动分配
  3. 列表分区
    • 列值必须明确指定
    • 一个分区列
  4. 复合分区
    • 先按第一分区方法分区
    • 再按第二分区方法划分子分区
  5. 其他分区

猜你喜欢

转载自blog.csdn.net/xxydzyr/article/details/85839877