数据库开发技术 课堂笔记2
2017-09-12 23:43
211 查看
本文主要来源是课堂笔记
有两种情况是比较头疼的:
数据库重构
数据库迁移(不同的数据库差异巨大)
由于空值可能导致无法预料的错误,因此尽量要避免空值的使用
就比如,某个教室被预定,这时候不希望出现的是教室是否被占用这个标识信息,而是在什么时候、被什么人占用这类的具体信息
老师上课举了这么一个例子
刘老师,是人,那么,在“人”这张表,存刘老师的“人”的信息,在“教师”这张表,存刘老师的教师信息。另外,在“人”这张表,存刘老师的身份信息,是教师,这样可以把“人”和“教师”两张表联合起来查询,得到刘老师的完整信息。
现在,刘老师为了给他儿子买乐高玩具,需要给曾老板(教我们Linux基础的老师)打工,这时候,他就多了一个扫地僧的身份,也就是他的信息这时候需要三张表来存储。
这时候要关联有困难,一种不是很好的做法是把“人”表里面加列,每多出现一个身份就多用一个标识位
当然,稍微好一点的做法是,在“人”表里面,存多条同一个人的记录,记录不同的身份
假设有一张n1列,m1行的表1,有一张n2列,m2行的表2,将这两个表连接查询,得到的是一张(n1+n2)列,(m1∗m2)行的表
取m1=1000,m2=10000,这两张表都是小表,但是连接起来以后数量级就比较可观了
在Oracle中,最多from16张表
为了减少表关联,有时需要去掉代码表与主表的关联,因为这样可能会有过多的表连接,影响效率
所谓的代码表是这样的:
主表是这样的:
如果代码表比较多,就可能导致查询比较慢,一种改变的做法是这样的:
这样存储的时候有冗余,但是查询的时候速度较快,从工程学的角度看,为了时间做出空间上的牺牲
共同的连续存储过程,如果只被一个app使用,那么存在数据库与存在app都可以,如果被多个app使用,那么应该放在数据库中。
数据的定义应该放在db中,例如人的年龄不应该是负数,即使app中有判断,也要在数据库中定义
Oracle中有一个关键字是check,可以检查数据的定义
在数据库中不能做过于灵活的设计
优化是一定要付出代价的,一定会带来恶果
处理历史数据或者相似的情况,就比如历史价格,可以在主表中存一个price作为当前的price,在history表中存储所有的历史数据,这样的话,虽然主表中有冗余的price,但是查询的时候方便了。
在可以不使用数据库的情况下,就不使用数据库,文件系统很好用。
有两种情况是比较头疼的:
数据库重构
数据库迁移(不同的数据库差异巨大)
空 == 空
这个判断的返回值,每个数据库的设计都不一样返回值 | 数据库类型 |
---|---|
false | MySQL Oracle |
空 | |
true | SQL Server |
Boolean类型
数据中没有boolean类型,是因为不希望使用标识信息,而是使用具体信息就比如,某个教室被预定,这时候不希望出现的是教室是否被占用这个标识信息,而是在什么时候、被什么人占用这类的具体信息
单继承、多继承
在单继承的情况下,存表比较简单老师上课举了这么一个例子
刘老师,是人,那么,在“人”这张表,存刘老师的“人”的信息,在“教师”这张表,存刘老师的教师信息。另外,在“人”这张表,存刘老师的身份信息,是教师,这样可以把“人”和“教师”两张表联合起来查询,得到刘老师的完整信息。
现在,刘老师为了给他儿子买乐高玩具,需要给曾老板(教我们Linux基础的老师)打工,这时候,他就多了一个扫地僧的身份,也就是他的信息这时候需要三张表来存储。
这时候要关联有困难,一种不是很好的做法是把“人”表里面加列,每多出现一个身份就多用一个标识位
当然,稍微好一点的做法是,在“人”表里面,存多条同一个人的记录,记录不同的身份
表的效率
from的表越少,效率越高,因为笛卡尔积的存在。假设有一张n1列,m1行的表1,有一张n2列,m2行的表2,将这两个表连接查询,得到的是一张(n1+n2)列,(m1∗m2)行的表
取m1=1000,m2=10000,这两张表都是小表,但是连接起来以后数量级就比较可观了
在Oracle中,最多from16张表
为了减少表关联,有时需要去掉代码表与主表的关联,因为这样可能会有过多的表连接,影响效率
所谓的代码表是这样的:
id | 值 |
---|---|
1 | 大风 |
2 | 暴雨 |
3 | 晴朗 |
主表id | 代码id |
---|---|
aaa | 1 |
bbb | 3 |
主表id | 代码值 |
---|---|
aaa | 大风 |
bbb | 晴朗 |
共同的连续存储过程,如果只被一个app使用,那么存在数据库与存在app都可以,如果被多个app使用,那么应该放在数据库中。
数据的定义应该放在db中,例如人的年龄不应该是负数,即使app中有判断,也要在数据库中定义
Oracle中有一个关键字是check,可以检查数据的定义
在数据库中不能做过于灵活的设计
优化是一定要付出代价的,一定会带来恶果
处理历史数据或者相似的情况,就比如历史价格,可以在主表中存一个price作为当前的price,在history表中存储所有的历史数据,这样的话,虽然主表中有冗余的price,但是查询的时候方便了。
在可以不使用数据库的情况下,就不使用数据库,文件系统很好用。
相关文章推荐
- 数据库开发技术 课堂笔记1
- 数据库开发技术 课堂笔记6 查询优化器和SQL优化
- 数据库开发技术 课堂笔记3
- 数据库开发技术 课堂笔记7
- 数据库开发技术 课堂笔记8 处理并发
- 数据库开发技术 课堂笔记5
- 数据库开发技术 课堂笔记4
- 数据库开发技术与工程实践 学习笔记
- 【实战\Java SSM快速开发仿慕课网在线教育平台项目笔记】第2章 项目各种结构概览(业务, 技术,角色,数据库,项目)
- 黑马程序员之项目开发学习笔记:ATM取款机系统数据库设计
- 数据库课堂笔记
- 火鸟数据库开发笔记
- 冒号课堂§1.5:开发技术
- C#开发笔记(数据库操作)
- MFC ODBC数据库开发技术(续)
- VC编程技术点滴(七)简单的数据库应用开发
- SQL学习笔记之数据库专题(二):Android下SQL数据库开发
- Android开发学习笔记之通过反射技术修改listview的快速滑块图像
- Eclipse插件开发 学习笔记 PDF 第一篇到第四篇 免分下载 开发基础 核心技术 高级进阶 综合实例
- Tomcat 与java web 开发技术详解笔记(三)----JSP