发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
什么是冗余字段?
在设计数据库时,某一字段属于一个表,但它又同时出现在另一个或多个表,且完全等同于它在其本来所属表的意义表示,那么这个字段就是一个冗余字段。
——以上是我自己给出的定义
冗余字段的存在到底是好还是坏呢?这是一个不好说的问题。可能在有人看来,这是一个很蹩脚的数据库设计。因为在数据库设计领域,有一个被大家奉为圭臬的数据库设计范式,这个范式理论上要求数据库设计逻辑清晰、关系明确,比如,”用户昵称”字段”nickname”本来属于表”user”,那么,表示”用户昵称”的字段就唯一的只应该属于”user”表的”nickname”字段,这样,当用户要修改昵称的时候,程序就只需要修改 user.nickname这个字段就行了,瞧,很方便。不过问题也随之而来,我在其他数据表(如订单orders表)里只存储了用户的ID,我要通过这个ID值得到用户昵称该怎么办呢?一个普遍的解决方法是通过联接(join),在查询时,通过id这个唯一条件联接两个表,从而取到用户的昵称。
这样确实是没问题,我也一直觉得这样是最好的方案,扩展方便,当要更新用户信息时,程序中要修改的地方很少,但是随着数据库里数据不断增加,百万,千万,同时,用户表的数据肯定也在不断的增加的,它可能是十万,百万。这个时候,你会发现两个表通过联接来取数据就显得相当费力了,可能你只需要取一个nickname这个用户昵称属性,你就不得不去联一下那个已经几十万的用户表进行检索,其速度可想而知了。
这个时候,你可以尝试把nickname这个字段加到orders这个订单表中,这样做的好事是,当你要通过订单表呈现一个订单列表时,涉及用户的部分可能就不需要再进行联接查询了。当然,有利就有弊,这样做的弊端就是,当你尝试更新用户信息时,你必须记得用户信息表里当前被更新的字段中,有哪些是冗余字段,分别属于哪些表,找到他们,然后加入到你的更新程序段中来。这个是程序中的开销,开销在开发人员的时间上了。至于这样做是否值得,就得看具体情况而定了。
所以,目前要创建一个关系型数据库设计,我们有两种选择:
选择哪一种呢?如果你是一个美学狂人,并且财大气粗,非要使用第一种方案,也没关系,这种方案的短板并非不可救药的。比如,你可以增加服务器,从数据库集群入手,进行读写分离,读的时候可以将压力分散到不同的数据库服务器上,这样也可以获得很好的性能,只是多付出了硬件成本和维护成本。或者,你可以在数据库前端架设Memcached之类的缓存服务,减少读写数据库的次数,也可以达到同样的效果。问题在于你确定你需要缓存之类的东西。
当然,如果你跟我一样,只有一台每月几十元买来的vps,甚至可能是一个虚拟主机,建议还是暂时压制你的美学欲望,跟我一起选择第二种方案吧,除非你愿意你的整个数据库都一直只有零零星星的几条数据
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
大型数据库设计原则
大型数据库有两种索引即簇索引和非簇索引,一个没有簇索引的表是按堆结构存储数据,所有的数据均添加在表的尾部,而建立了簇索引的表,其数据在物理上会按照簇索引键的顺序存储,一个表只允许有一个簇...
数据库设计中最常见的九大错误
身为数据库设计人员,当您负责数据库项目时,在设计过程中将数据库部署到生产环境之后,相信您一定会遇到一些挑战。创建数据库的目标有 ...
深入了解数据库设计的三范式
一、第一范式(1NF):列的原子性第一范式是指数据库表中的每个字段都是原子性的,即不可再分的。应拆分为二、第二范式(2NF):消除部...
数据库设计中的14个技巧
高级冗余不是字段的。10. 视图技术在数据库设计中很有用 与基本表、代码表、中间表不同,视图是一种虚表,它依赖数据源的实表而存在。库变成了随意设计数据库表的“垃圾堆”,或数据库表的“大杂院...
数据库连接、设计以及备份技巧集锦
2如何改变数据库的运行方式2.1在创建数据库时设置数据库的运行的方式 在创建数据库时,作为创建数据库的一部分,就决定了数据库初始的存档方式。提倡"三少"原则的目的,是防止读者利用...
数据库三大范式的理解
数据库三大范式的理解。第一范式就是在第零范式的基础上进行的改进,网上有很多人认为,所谓第一范式就是指表中的所有字段都是原子的、不可再分的,我个人认为此种理解也是正确的,原因不解释,我对第...
数据库设计的黄金经验(转)
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。(2) 一个表中组合主键的字段个数越少越好。提倡“三少”原则的目的,是防止读者利用打补丁技术,不断地对...
几种数据库设计思想
1.传统做法:出口报运单对象——加载出购销合同的集合——遍历出每个购销合同——通过购销合同得到货物——再通过货物得到附件。数据搬家:数据搬家也是数据库优化的一种:表级别的数据冗余,再添加一...
20190728 冗余设计
关系数据库中的数据冗余主要是指关系数据库中同一信息数据的重复存贮。最后的做法是:分析者两张表的所有“联表查询”sql语句,把主业务...
微信扫码,在手机上查看选中内容