数据库

范式

第一范式 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 ,这两个动作能保证都完成了?(保证原子性)

答:
使用 事务

你可能感兴趣的:(数据库)