1、数据库设计流程

数据库设计 - 图1

2、数据库逻辑设计

2.1、宽表模式

2.1.1、宽表模式存在的问题

  • 数据冗余:相同的数据在一个表中出现了多次
  • 数据更新异常修改一行中某列的值,同时修改了多行数据
  • 数据插入异常:部分数据缺失主键信息而无法写入表中
  • 数据删除异常:删除某一条数据时不得不删除另一条数据

    2.1.2、宽表模式的应用场景

  • 配合列存储的数据报表应用

    2.2、 数据库设计范式

  • 第一范式:原子性:要求属性具有原子性,不可再分解(表中的所有字段都是不可再分的)

  • 第二范式:惟一性:记录有惟一标识,即实体的惟一性,即不存在部分依赖
  • 第三范式:冗余性:要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖;

    2.2.1、范式化的优点

  • 数据表更新快体积小

  • 当数据较好的范式化时,就只有很少或者没有重复数据,所以只需要修改更少的数据。
  • 范式化的表通常更小,可以更好的放在内存里,所以执行操作会更快。
  • 可以尽量减少数据冗余(很少有多余的数据意味着检索列表数据时更少需要Distinct 或者 GROUP BY 语句)

    2.2.2、范式化的缺点

  • 对于查询需要多个表进行关联,导致性能降低

  • 更难进行索引优化

    2.3、反范式的优点和缺点

    2.3.1、反范式的优点

  • 反范式化的schema因为数据都在一张表中,可以很好的减少表的关联

  • 可以更好的进行索引优化

    2.3.2、反范式的缺点

  • 存在数据冗余及数据维护异常

  • 对数据的修改需要更多成本