SQL反模式总结

本文总结了SQL设计中常见的反模式,包括乱穿马路、单纯的树、主键规范、缺少外键约束、元数据分裂、取整作死、新类型和幽灵文件等问题,并给出了相应的解决方案和优化技巧,如使用闭包表、组合键、外键约束、分区表以及BLOB类型等。
摘要由CSDN通过智能技术生成

1.乱穿马路
现象:在一个表键中存放多个值,用,. / \类似的符号隔开
问题:这会让查询.插入和删除的效率变得非常低
解决方案:不要在一个表键中存放多个值,将所有原本在一个表键中的值存放到一张单独的表,在新表中创建两个属性,
一个与原表的主键建立外键关系,一个标明值。例子见表

产品id 经销商
1 张三
1 李四
2 老王
2 老李
3 老刘

id 名字 其他属性
1 电锯
2 锤子
3 镰刀

同样的,这个方法也可以用来存储商品标签
2.单纯的树
现象:在类似于评论树中直接在评论数据后添加一个父节点ID的•属性来记录树形结构
问题:每增加一层查询,就需要额外的联结查询,多个联结查询会让数据库变得非常低效,且易产生孤立节点。
解决方案:闭包表,额外创建一张表格,用来记录树结构间的关系,原书描述的方法实践起来有一定缺陷,在列出树形结构的时候很容易产生困扰,下面是一个个人实践的例子。
r_id 属于文章 ….(内容等)
1 文章1 …
2 文章1 …
3 (这个键应该填文章的主键。) …

父节点 本节点
1 1
1 2
2 3
… …
因为评论树中一个节点的父节点只有一个,而一个父节点的子节点可以有多个,所以,我们记录父节点id即可遍历出评论树。

3主键规范
现象&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值