任何一个伟大的目标,都有一个微不足道的开始。

数据库表结构怎么设计

三范式

  1. 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,即列不能够再分成其他几列;
  2. 第二范式:2NF首先是要满足1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。 
  3. 第三范式:3NF首先是要满足2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。这是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

 

范式的优点:

1)范式化的数据库更新起来更加快;

2)范式化之后,只有很少的重复数据,只需要修改更少的数据;

3)范式化的表更小,可以在内存中执行;

4)很少的冗余数据,在查询的时候需要更少的distinct或者group by语句。

范式的缺点

1)范式化的表,在查询的时候经常需要很多的关联,因为单独一个表内不存在冗余和重复数据。这导致,稍微复杂一些的查询语句在查询范式的schema上都可能需要较多次的关联。这会增加让查询的代价,也可能使一些索引策略无效。因为范式化将列存放在不同的表中,而这些列在一个表中本可以属于同一个索引。


 

反范式的优点:

1)可以避免关联,因为所有的数据几乎都可以在一张表上显示;

2)可以设计有效的索引;

反范式的缺点:

1)表格内的冗余较多,删除数据时候会造成表有些有用的信息丢失。

所以在设计数据库时,要注意混用范式化和反范式化。

posted @ 2021-11-15 20:15  BigPigKing  阅读(1108)  评论(0)    收藏  举报