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

本文主要来源是课堂笔记


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

  1. 数据库重构
  2. 数据库迁移(不同的数据库差异巨大)

空 == 空

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

返回值数据库类型
falseMySQL Oracle
trueSQL Server

由于空值可能导致无法预料的错误,因此尽量要避免空值的使用

Boolean类型

数据中没有boolean类型,是因为不希望使用标识信息,而是使用具体信息

就比如,某个教室被预定,这时候不希望出现的是教室是否被占用这个标识信息,而是在什么时候、被什么人占用这类的具体信息


单继承、多继承

在单继承的情况下,存表比较简单

老师上课举了这么一个例子

刘老师,是人,那么,在“人”这张表,存刘老师的“人”的信息,在“教师”这张表,存刘老师的教师信息。另外,在“人”这张表,存刘老师的身份信息,是教师,这样可以把“人”和“教师”两张表联合起来查询,得到刘老师的完整信息。

现在,刘老师为了给他儿子买乐高玩具,需要给曾老板(教我们Linux基础的老师)打工,这时候,他就多了一个扫地僧的身份,也就是他的信息这时候需要三张表来存储。

Markdown

这时候要关联有困难,一种不是很好的做法是把“人”表里面加列,每多出现一个身份就多用一个标识位

当然,稍微好一点的做法是,在“人”表里面,存多条同一个人的记录,记录不同的身份


表的效率

from的表越少,效率越高,因为笛卡尔积的存在。

假设有一张 n1 列, m1 行的表1,有一张 n2 列, m2 行的表2,将这两个表连接查询,得到的是一张 (n1+n2) 列, (m1m2) 行的表

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,但是查询的时候方便了。


在可以不使用数据库的情况下,就不使用数据库,文件系统很好用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值