《SQL反模式》笔记

本文主要探讨了SQL设计中的一些常见反模式,如乱穿马路(字段分隔符存储多值)、树形结构的不当存储、伪主键的使用、外键的权衡、实体-属性-值模式的问题以及多态关联和元数据分裂。提出了更优的解决方案,如建立交叉表、使用闭包表、合理设计主键和外键策略以及优化继承和关联结构。
摘要由CSDN通过智能技术生成

一、乱穿马路
在字段中使用分隔符以达到记录多值的方法是一种反模式,尤其是可能被查询条件,统计条件使用的字段。
解决方法是建立交叉表,在交叉表中记录多对多的关系。

二、树形结构
以评论树的案例讲解了数据库存储树结构的方法。简单记录上级节点的设计(邻接表模型)是一种反模式,虽然简单,但是在查询,统计等数据库操作中很复杂。
反模式只能在树层级很少很少(最多2~3层)的时候可以使用。
解决方法就是让记录的信息多一些(冗余换性能)。可以使用路径枚举、嵌套集、闭包表。
路径枚举就是把所有祖先信息联合成一个字符串,缺点是查找所有祖先节点时比较复杂。路径枚举设计在新增和简单删除操作时简单。
嵌套集设计使用存储子节点的键值的范围的方式,缺点是新增、删除节点操作很复杂。
闭包表记录树中所有节点的关系,也就是每一个父子关系都是一条记录(节点和节点自身也是父子关系)。闭包表的新增和删除都不是简单操作一条记录,需要关联删除。

三、伪主键-ID
使用指代意义明确的字段名,主键的目的是唯一确定一条记录,主键需要满足索引特性,使用组合键是必要的。

四、是否需要使用外键?
外键可以有效保证数据库数据的完整性和一致性,但是除了影响性能外,还可能造成业务死锁。
不使用外键,那么数据库数据完整性需要在代码中自己实现。
cascade和restrict

五、实体-属性-值
实际情况:数据对象是继承产生的,如何存储对象?
反模式设计:设计一张表包含实体、属性、属性值;因为要存储多个属性,所以属性值只能是字符串。每个属性-值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值