SQL反模式:SQL 建模与使用指南

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 上周末花了几个小时刷完《SQL反模式》这本书,书里介绍了数据库应用开发者最长遇到的一些问题,虽然这本书面向的读者是使用数据库的应用开发者,但它对数据库管理员、数据库开发者同样会有启发,强烈推荐阅读。

SQL_ANTI

上周末花了几个小时刷完《SQL反模式》这本书,书里介绍了数据库应用开发者最长遇到的一些问题,虽然这本书面向的读者是使用数据库的应用开发者,但它对数据库管理员、数据库开发者同样会有启发,强烈推荐阅读。本书涉及的问题包括但不限于

  1. 如何存储多值属性?
  2. 如何使用关系模型表达树结构?
  3. 如何建立主键规范?
  4. 如何支持可变的属性/字段?
  5. 如何从表中随机选择一行?
  6. 如何实现文本查询的需求?
  7. 如何存储文件类型数据?
  8. 如何限定列的有效值?
  9. 如何表达精准浮点数?
    10.如何写出安全(难以 SQL 注入)的 SQL 语句?
  10. ...

针对上面的问题在实际的开发场景中都经常遇到,作者介绍了一系列「反模式」的设计思路,我发现很多都是开发过程中很容易犯的错误。以「如何存储多值属性」为例,最直观的反模式设计思路就是「复用原来字段,格式化的逗号分割列表」,如果需求比较局限,联系人数量不会无限制扩展,针对联系人字段也不会经常有查询、聚合需求,这种方法的确成本很低。

但实际上这种方法缺点很多,比如(1)针对这个字段的查询,基本都得使用正则表达式,而正则表达式没有确定的规范,不同的数据库支持都不一样,导致写出的 SQL 也不具备通用性。(2) 针对该字段里属性的查询无法使用索引 (3)列长度有限制,属性数量扩展有上限 ... 而这些随着应用需求的不断变化,可能对系统产生非常大的影响,扩展起来非常麻烦。

从数据库开发者的角度看,对于这么多可能误用的场景,我们需要思考数据库服务本身能做什么工作来简化、或者规避问题,比如

  1. 很多新的存储引擎都具备了 SAMPLE 随机取样的能力,方便用户随机获取记录,避免了用户
  2. 阿里云数据库上,专门有针对防 SQL 防注入的检查,减小了用户犯错造成的影响
  3. 对于属性可扩展的需求,SQL 可能并不是最佳需求,一些基于 KV、Document 的接口的数据库,如 Redis、MongoDB,可能是更加的选择。
  4. 对于文件存储的需求,存储在数据库节点同机器上文件系统上有很多问题, 但量大的时候,存储在数据库里也无法满足需求;目前比较常用的方案时,文件存储到专门的分布式文件系统里,数据库里存储对象的标识名。
相关文章
|
SQL Java 数据库
JSP毕业设计宣传网站系统myeclipse开发sql数据库BS模式java编程网页结构
JSP 毕业设计宣传网站系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 二、功能介绍
55 0
|
SQL 前端开发 Java
JSP毕业设计选题系统统myeclipse开发sql数据库BS模式java编程mvc结构
JSP 毕业设计选题系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
42 0
|
SQL Java BI
JSP超市销售管理统myeclipse开发sql数据库BS模式java编程网页结构
JSP 超市销售管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为SQLSERVER2008,使用java语言开发
45 0
|
6月前
|
SQL 数据库 数据库管理
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
176 11
|
3月前
|
SQL 安全 数据库
|
3月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
56 0
|
4月前
|
SQL 弹性计算 资源调度
云服务器 ECS产品使用问题之bin/spark-sql --master yarn如何进行集群模式运行
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
5月前
|
关系型数据库 MySQL 数据库
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在DataWorks的数据开发模式中,在presql和postsql中支持执行多条SQL语句如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
163 1
|
6月前
|
SQL 消息中间件 缓存
Flink SQL中使用DEBUG模式来输出详细的日志信息,
Flink SQL中使用DEBUG模式来输出详细的日志信息,
304 0