《SQL反模式》笔记

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值