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 |
SQL优化
一般优化技巧
- 建议不用“*”代替所有列名
- 删除所有数据用TRUNCATE代替DELETE
- 用NOT EXISTS 代替NOT IN
- 用EXISTS代替IN
- 用EXISTS代替DISTINCT
- where子句的连接顺序:1. 表连接关系放在前面;2. 过滤记录越多的条件子句应放置到后面
索引
索引分类:
逻辑分类 | 物理分类 |
---|---|
单列或组合索引 | 分区或非分区索引 |
唯一或非唯一索引 | B 树索引 |
基于函数索引 | 正常或反向键索引 |
位图索引 |
其他索引: 唯一索引、反向键索引、位图索引、组合索引、函数索引等
创建索引原则:
- 频繁搜索的列
- 经常排序、分组的列
- 经常连接的列
- 指定单独的表空间
不适合建立索引原则:
- 数据量小
- 仅包含几个不同值的列
- 数据表操作特别频繁、业务性能要求高
表分区
概念:把表中数据划分成若干部分,并存储在不同的位置
优点:
- 改善查询性能
- 表更容易管理
- 便于备份和恢复
- 提高数据安全性
表分区分类:
- 范围分区
- 列值的范围作为划分条件
- 散列分区
- 列的hash值自动分配
- 列表分区
- 列值必须明确指定
- 一个分区列
- 复合分区
- 先按第一分区方法分区
- 再按第二分区方法划分子分区
- 其他分区