经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
空间换时间之反范式设计之路/合理冗余/去除外键
来源:cnblogs  作者:CodeL  时间:2018/11/20 13:25:07  对本文有异议

数据库反范式设计是一个老生常谈的话题,最近两年我用的也确实非常多,我个人觉得合理的反范式设计才是更合理的设计,严格的范式设计在某种程度上会加大开发的复杂度,并且带来性能上的耗损

 

对于反范式的优劣势,欢迎大家留言讨论

 

一、关系数据库三大范式回顾

第一范式:原子性每一列都是不可分割的

第二范式:每个表必须有一个主键、唯一标识

第三范式:说的就是减少冗余字段、增加外键关系

 

二、什么是反范式?

不完全满足以上范式的设计过程就是反范式设计

 

三、常见的反范式设计 - 合理冗余

(思考:冗余会带来哪些问题?)

冗余可能是用的最多也是最能立竿见影的方式了,在数据库范式规范中,提倡我们尽量减少冗余,但实际工作下来,觉得合理的冗余将极大的提升查询性能,并给开发工作带来了极大的便利

如上图,是我常用的伎俩,在存储操作人、省市区等信息的时候,我常常会将对应的名称也存储起来, 省去了多表联查,提升了性能

 

数据冗余规范:

1. 变更频率小或者不变更的内容,如省市区、姓名、行业等;

2. 冗余数据不能过大,如果表占用空间过大,反而降低查询性能

(思考:还有哪些需要注意的点?)

 

四、常见的反范式设计 - 去除外键

在范式设计中,对于两个表的关联,要求我们需要建立外键关系,但实际工作中,我们在设计时常常去除了这一点,对于数据的完整性和一致性都是通过程序来处理

 

五、反范式设计的优势

   1. 减少多表联查,提升查询性能

   2. 降低开发复杂度

 

六、反范式设计带来的问题

   1. 数据一致性问题,对于冗余数据一旦发生变更,维护起来将是一件麻烦的事情(目前还没有遇到这类问题,偶尔出现姓名更改,但如果把姓名冗余当做快照来看待也没问题)

   2. 增加磁盘空间占用,冗余数据将会占用额外的磁盘空间 (也就是空间换时间的概念)

 

最后:

大家结合自身实际情况,切不可盲目参照,合理使用,对于反范式设计的想法,欢迎大家留言区讨论

 

 

相关资源获取或其他疑问可在公众号CodeL留言。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号