数据库范式设计和反范式设计

1> 库表设计遵从三大范式。

a、数据库设计的第一大范式:数据库表中的所有字段都只具有单一属性;单一属性的列是由基本数据类型所构成的;设计出来的表都是简单的二维表。(一个列存放的信息只是一个属性的信息,不能一个字段存放多个属性的组合信息。即数据库表中的所有字段值都是不可分解的原子值)。

b、数据库设计的第二大范式:确保表中的每列都完全依赖主键。也就是说在一个数据库表中,一个字段必须完全依赖于这个主键,不可以只部分依赖主键。

c、数据库设计的第三大范式:确保每列都和主键列直接相关,而不是间接相关。也就是说一个表里面可以存放其它表的外键,

但不可以存放其它表的其它字段。其它字段与该表主键没有直接关系。

 

      如果完全遵从数据库的三大范式设计,那么数据库表关系比较清晰,数据种类区分比较明显。对于开发人员来说是十分有利工作的。但是,如果业务复杂的话,对数据库性能是一个极大的挑战。如一个复杂的join sql。如果数据量大。数据数据查询的时候,数据量级别倍增。导致查询缓慢等影响软件的性能。所以设计数据库表的时候要适当的采用反范式设计。否则,以后再怎么优化sql也不一定能提升sql性能。

 

2>反范式设计。

       不遵从范式设计规则就是反范式设计。在反范式的设计模式,我们可以允许适当的数据的冗余,用这个冗余去取操作数据时间的缩短。本质上就是用空间来换取时间,把数据冗余在多个表中,当查询时可以减少或者是避免表之间的关联。如商品表和分类表。遵从范式设计,则商品信息一个表,分类信息一个表,两个表的一个中间关联表。我们要查询一个商品的分类时,避免不了多表联查的情况。如果适当采用反范式设计,可以在商品表中冗余分类名称时,那么要显示查询这个商品的类型时,直接单表查询解决性能问题。 

 

 

 

你可能感兴趣的:(mysql,数据库,数据库表设计)