数据库
2020-05-23 本文已影响0人
YQY_苑
范式
第一范式 1NF
属性不可分割
- 字段不可再分
第二范式 2NF
字段完全依赖于键
- 在1NF的基础上,要有键(键可有多个字段组合)
- 所有字段分别完全依赖于键
- 如果键是多个字段组合,则不允许部分依赖于该键
第三范式 3NF
键中的属性也不存在间接依赖
- 在1,2NF的基础上,一个表不能有两层依赖
数据库设计经验
1. 高内聚
- 把相关的字段放在一起,不相关的分开建表
- 如果两个字段能够单独建表,那就单独建表
2. 低耦合
- 如果表之间有弱关系
- 一对一可放在一个表,也可两个表加外键
- 一对多一般用外键
- 多对多一般建中间表
当关联自身存在属性时,需要建关联表
关联 JOIN
- Left join : 会保留右边的null,以保证左边都显示
- Right join : 会保留左边的null,以保证右边都显示
- Full outer join : 会保留两边的null,以保证两边都显示(一般为多表)
缓存字段 => 事务
假设,一个博客blog包含多个评论comments
如何获取博客的评论数?
select count(id) from comments where blog_ig=8
???
这样会很慢的,加入上百千万亿和博客,难道都要轮一遍计算?
可以在blog表上加一个 comment_count 字段,
每次添加comment则 +1 , 删除 -1
此时,则会产生一个问题,如何保证添加了comment之后,comment_count +1 ,这两个动作能保证都完成了?(保证原子性)
答:
使用 事务