您的位置:首页 > 数据库

数据库开发技术 课堂笔记2

2017-09-12 23:43 211 查看
本文主要来源是课堂笔记

有两种情况是比较头疼的:

数据库重构

数据库迁移(不同的数据库差异巨大)

空 == 空

这个判断的返回值,每个数据库的设计都不一样

返回值数据库类型
falseMySQL Oracle
trueSQL 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
aaa1
bbb3
如果代码表比较多,就可能导致查询比较慢,一种改变的做法是这样的:

主表id代码值
aaa大风
bbb晴朗
这样存储的时候有冗余,但是查询的时候速度较快,从工程学的角度看,为了时间做出空间上的牺牲

共同的连续存储过程,如果只被一个app使用,那么存在数据库与存在app都可以,如果被多个app使用,那么应该放在数据库中。

数据的定义应该放在db中,例如人的年龄不应该是负数,即使app中有判断,也要在数据库中定义

Oracle中有一个关键字是check,可以检查数据的定义

在数据库中不能做过于灵活的设计

优化是一定要付出代价的,一定会带来恶果

处理历史数据或者相似的情况,就比如历史价格,可以在主表中存一个price作为当前的price,在history表中存储所有的历史数据,这样的话,虽然主表中有冗余的price,但是查询的时候方便了。

在可以不使用数据库的情况下,就不使用数据库,文件系统很好用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: