数据库基础理论

1. 第一范式(1NF):有主键、强调的是列的原子性,未出现在候选键中的列即为 非主键列 ,候选键有多个
2. 第二范式(2NF):非主键列必须完全依赖于候选键,而不能是部分依赖,只依赖于候选键的一部分 + 1NF 发生在具有关联键的表中,只保留与关系相关的属性,去除与实体相关的属性,一般为一对多关系
3. 第三范式(3NF):非主键列必须直接依赖于候选键,不能存在传递依赖 + 2NF 发生在关系表中,只保留与关系相关的属性,去除与实体相关的属性,一般为多对一关系
4. BCNF:每个属性(包括主键列)都完全依赖于侯选键 +3NF 发生在主键由数量大于3的关联键组成的表,对复杂关系进行合理拆分

- 1:1关系 -> 可以将关系视为属性,合并到实体表中
- 1:n关系 -> 将1的主码视为n端的属性,合并到n端实体表中,最简练 或者构造 关系表,连接增多
- m:n关系 -> 必须构造关系表
一些可能不正确的惯例
游标效率较差
where 子句中使用 != 或 <>,无法使用索引,而进行全表扫描,能正选就不要反选
where 子句不宜进行表达式操作和函数操作,使用原生列才可以利用索引
where 子句条件的数据类型不吻合时,索引失效,如身份证号码为字符类型时,查询身份证号码='123456789900' right 身份证号码=123456789900 wrong
where 子句使用 or 效率较差,改用UNION避免全表扫描,当且仅当两边条件都是索引列
where 子句使用 IS NULL 或者 IS NOT NULL ,全表扫描,因此可为空的列尽量给出默认值,哪怕是''
对于in 和 not in,连续的数值情况下,能用 between 就不要用 in
位图索引通常对于NULL字段有效果
复合索引,where条件必须包括复合索引的第一个字段
索引提高select效率,降低insert update操作的效率(重建索引)

事务的ACID特性

  • 原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。(支持回滚),不保证合理性
  • 一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态,保证合理性

    例如,系统中的金额总数应当是一致的,如果数据库中有没有执行完的事务,那就是不一致的,否则,就是一致的。
    强一致性:系统始终是一致的
    弱一致性:允许系统短暂的不一致(最终一致性,在一段时间后,节点间的数据会最终达到一致状态,常见于分布式系统)

  • 隔离性(Isolation):适当的破坏一致性来提升性能与并行度 ,最终一致~=读未提交

    一个事务会不会读取到另一个未提交的事务修改的数据,否则就是脏读
    一个事务执行过程中读取到另一个提交事务修改的数据,称为不可重复读
    一个事务执行过程中查询到数据集记录数不同,事务并发增加记录时导致,称为幻读
    隔离级别从低到高有:
    Read Uncomitted
    Read Commited 避免脏读
    Repeated Read 避免不重复读和脏读
    Serialization 避免幻读

  • 持久性(Dura- bility):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值