数据存储:如何平衡增删改查

本文是《数据库设计那些事》的笔记杂想。

数据存储所要解决的问题就是,通过权衡增删改查的利弊,选择恰当的数据存储方式。

如何权衡呢?

比如考虑下面这张表,该表违背了第二范式的设计理念:

在这里插入图片描述

在增加行,即插入的时候,会出现什么问题?因为这个商品表是由商品信息和供应商信息耦合而成,如果供应商信息缺失或者部分缺失,那么在插入的时候就会存在问题(
找不到商品的供应商电话或者名称)。以后如果想补全供应商信息,得通过供应商名称找到相关行,然后再逐行更新电话。如果把供应商信息单独存储,商品表只保留一个供应商id,那么就会避免这种情况,即使供应商信息不全,也没关系,只要过会儿 供应商在
供应商表中补全了供应商信息即可,更新只要一行。

在删除的时候,会出现什么问题?如果供应商只有一件商品,那么删除那一行,供应商的号码就没了。

更新异常,就是插入异常的那个例子类似,更新得更新多行。

不过上面的那个表的设计,也是有好处的。好处就是查方便。

那么解决办法呢?

第一种解决办法:

将上面的表拆分成两张表,一张是商品表,一张是供应商信息表。在商品表中保留供应商 id。

这种解决方法,在删除、更新的时候,都没有问题,就是增加行的时候,得确保,提供供应商id,否则增的时候可能会出现问题。

此外,就是数据冗余。 就是 商品信息完全相同,只有 供应商id不同,结果要两行存储。

好处是相比较第二种办法,查询时更加方便,少查询一次。

第二种解决办法:

在这里插入图片描述

拆分出三张表。

这样商品信息和 供应商信息完全割裂开。

插入的时候是完全没有问题的。

增删改的问题也完全避免了。

缺点是查询时复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值