来源书籍

SQL与关系数据库理论——如何编写健壮的SQL代码(原书第2版)

数据库/存储引擎类

经典原理(高浓度 + 高稳定性)

本书的核心不是罗列SQL语法,而是用关系模型、谓词逻辑、类型理论、约束和关系 代数解释为什么某些SQL写法会产生不可靠结果,以及如何把SQL尽量按关系化方式使用。第1章 明确区分"SQL vs. 关系模型""模型 vs. 实现""关系值 vs. 关系变量";第4章用重复行和NULL 破坏表达式变换、查询答案和信息原理的例子说明SQL偏离关系理论的风险;第8章把约束提升为 数据库正确性的核心机制,讨论立即检查、语义优化和多重赋值;第10-11章用一阶谓词逻辑 重新解释SQL的WHERE/JOIN/子查询语义。这些内容解释的是关系数据库长期稳定的理论约束, 不随具体产品版本变化而过时,因此定级经典原理,是本轮v7重跑目前评级最高的一本书。 命中`category-checklists.md`"数据库/存储引擎类",但本书视角与《PostgreSQL 9X之巅》 等工程实践类书籍完全不同——后者讲存储引擎内部实现细节,本书讲的是关系模型与SQL语言 设计本身的理论正确性,两者在同一类别下互补,制卡时应避免与该系列已有卡片(事务/隔离 级别、MVCC等实现层面话题)重复,聚焦本书独有的关系代数、逻辑谓词、类型/域理论视角。

类别清单覆盖

0/5

已覆盖 0 补充生成 0 未覆盖 5

全书概览

SQL与关系数据库理论——如何编写健壮的SQL代码(原书第2版)

Skill 版本:v7

类别:数据库/存储引擎类

四象限结论:经典原理(高浓度 + 高稳定性)

理由:本书的核心不是罗列SQL语法,而是用关系模型、谓词逻辑、类型理论、约束和关系 代数解释为什么某些SQL写法会产生不可靠结果,以及如何把SQL尽量按关系化方式使用。第1章 明确区分”SQL vs. 关系模型”“模型 vs. 实现”“关系值 vs. 关系变量”;第4章用重复行和NULL 破坏表达式变换、查询答案和信息原理的例子说明SQL偏离关系理论的风险;第8章把约束提升为 数据库正确性的核心机制,讨论立即检查、语义优化和多重赋值;第10-11章用一阶谓词逻辑 重新解释SQL的WHERE/JOIN/子查询语义。这些内容解释的是关系数据库长期稳定的理论约束, 不随具体产品版本变化而过时,因此定级经典原理,是本轮v7重跑目前评级最高的一本书。

命中category-checklists.md“数据库/存储引擎类”,但本书视角与《PostgreSQL 9X之巅》 等工程实践类书籍完全不同——后者讲存储引擎内部实现细节,本书讲的是关系模型与SQL语言 设计本身的理论正确性,两者在同一类别下互补,制卡时应避免与该系列已有卡片(事务/隔离 级别、MVCC等实现层面话题)重复,聚焦本书独有的关系代数、逻辑谓词、类型/域理论视角。

章节筛选

章节号 章节标题 精读/略读 状态 卡片数
0 版权页/前言/目录/引言 略读 done 0
1 第1章 做好准备 精读:建立全书术语、关系模型边界、模型与实现差异,是后续章节的基础 done 13
2 第2章 类型和域 精读:类型理论如何约束SQL数据完整性 done 8
3 第3章 元组、关系、行、表 精读:关系模型核心概念与SQL实现的对应与偏离 done 8
4 第4章 不要重复,不要null 精读:重复行与NULL破坏关系代数封闭性的具体机制 done 7
5 第5章 基关系变量和基表 精读:关系变量与表的区别、数据库设计的理论基础 done 8
6 第6章 SQL和关系代数I:原始运算符 精读:关系代数原始运算符与SQL对应关系 done 12
7 第7章 SQL和关系代数II:附加运算符 精读:关系代数附加运算符与SQL对应关系 done 12
8 第8章 SQL与约束 精读:约束作为数据库正确性核心机制、立即检查与语义优化 done 10
9 第9章 SQL与视图 精读:视图的关系理论基础与更新语义 done 11
10 第10章 SQL与逻辑 精读:一阶谓词逻辑与SQL语义的对应 done 14
11 第11章 使用逻辑表述SQL表达式 精读:用逻辑重新表述和验证SQL表达式的方法 done 11
12 第12章 关于SQL的其他主题 精读:补充主题,逐节判断信息浓度(12.2显式表/12.8 BNF语法按浓度过滤未生卡) done 6

实践卡进度

序号 实践标题 实践方式 状态(pending/done) 关联章节 产出
1 核验cardbox外键补偿式立即检查是否贴合黄金规则 实现深读 done 第5、8章 基于db.go具体行号的结论笔记,判断migrateV1ToV2的关闭/核查/重开模式是否符合”约束立即检查”原则
2 核验cardbox的luhmann_code唯一索引对多个NULL的真实行为 证据验证 done 第4、8章 联网核验SQLite官方文档 + 真实sqlite3实测(两行NULL成功共存),确认idx_cards_luhmann_code的WHERE条件在SQLite下技术上多余
3 核验CREATE ASSERTION在主流数据库2026年的支持现状 证据验证 done 第8章 联网核验PostgreSQL官方文档+社区邮件列表,确认2026年仍不支持CREATE ASSERTION,但已有2026-02社区提案援引Oracle先例

待关联术语

术语名 出现章节 一句话语境

引用文献

标题 类型 出现章节 一句话语境
Databases, Types, and the Relational Model: The Third Manifesto 第1章 作者与Hugh Darwen合著,定义了Tutorial D,本书用它表达SQL无法直接表达的关系赋值等概念

类别清单核对

维度 覆盖状态 关联卡片标题或未覆盖理由
存储结构与索引原理 未覆盖 第1章明确将索引/物理存储划为”实现层”(见[[模型与实现的区分及连接很慢为何没有意义]]、[[物理数据独立性]]),全书立场是关系模型对物理存储只字未提,但从未展开讨论B树/LSM树等具体结构的取舍——定向检索确认全书正文无相关实质内容
事务与隔离级别 部分覆盖 第8章讨论了ACID定义(含一致性=完整性的等价说明)、约束必须在语句边界立即检查、多重赋值如何替代延迟检查(见[[ACID一致性不等于正确性及事务不是完整性单位]]、[[数据库约束必须立即检查的理由与语义优化]]、[[多重赋值解决延迟检查困境的更优方案]]),但未深入讨论具体隔离级别(读未提交/可重复读/串行化等)之间的权衡机制,这部分内容明确超出本书范畴
复制与分片策略 未覆盖 定向检索全书正文无主从复制、分片路由相关实质讨论;这类分布式系统工程议题不在本书”关系理论/SQL语义”的既定范围内
查询优化器原理 部分覆盖 第6章表达式变换与分配律/交换律/结合律(见[[表达式变换与优化的分配律交换律结合律]])、第8章语义优化(见[[数据库约束必须立即检查的理由与语义优化]])从逻辑等价改写角度覆盖了优化器”如何生成等价执行路径”这一核心机制,但未讨论具体的代价估算算法(如统计信息驱动的cost-based optimization细节),书中明确说明基于代价的优化超出本书范围
故障恢复机制 未覆盖 定向检索全书正文无WAL、checkpoint、崩溃恢复相关实质讨论;这类物理持久化机制同样被划入”实现层”,不在本书讨论范围
并发控制机制 未覆盖 第8章仅在ACID定义层面提及隔离性(isolation),但未展开讨论锁机制与MVCC的具体实现取舍;定向检索确认全书正文无相关实质内容
存储与计算的工程权衡 未覆盖 书中反复强调性能/存储属于实现层问题、不属于关系模型讨论范畴(见[[模型与实现的区分及连接很慢为何没有意义]]),因此从未展开讨论读写放大、压缩策略等具体工程权衡——这不是遗漏,而是本书理论定位的直接结果

核对结论:7个维度中0个完整覆盖、2个部分覆盖、5个未覆盖。这个覆盖分布 准确反映了本书在_overview.md顶部已声明的定位——本书是”数据库/存储引擎类” 下与《PostgreSQL 9X之巅》互补的理论分支,聚焦关系模型、谓词逻辑、类型/域 理论及SQL语义的正确性,而非存储引擎内部实现细节;该类别清单的大部分维度 (存储结构、复制分片、故障恢复、并发控制、工程权衡)恰好对应本书明确 划归”实现层”、有意不深入讨论的内容,这一低覆盖率是本书理论定位的自然 结果,不应被解读为制卡疏漏。

资金安全问题案例

问题标题 问题卡 解决方案卡(如有) 出现章节 一句话说明

章节与卡片

01

  1. 原理优先 普通读书笔记卡
  2. SQL与关系模型不是一回事:正式术语与SQL术语的取舍原则 普通读书笔记卡
  3. SQL不是关系模型 普通读书笔记卡
  4. 原理优于产品:关系模型知识的可迁移性 普通读书笔记卡
  5. 术语塑造理解 普通读书笔记卡
  6. 候选键、主键与外键的精确定义 普通读书笔记卡
  7. 模型实现分离 普通读书笔记卡
  8. 实体完整性与参照完整性及NULL的本质 普通读书笔记卡
  9. 值变量分离 普通读书笔记卡
  10. 关系代数的闭包性质 普通读书笔记卡
  11. 原始关系代数的六个运算符 结构图卡
  12. 模型与实现的区分及"连接很慢"为何没有意义 普通读书笔记卡
  13. 物理数据独立性 普通读书笔记卡
  14. 数据模型的两种含义 普通读书笔记卡
  15. 关系的五条性质与SQL表为何不是关系 结构图卡
  16. 基关系与视图在关系模型中没有本质"物理"差异 普通读书笔记卡
  17. 关系值与关系变量的区分及DELETE的本质 普通读书笔记卡
  18. 关系模型的声明式本质 普通读书笔记卡

02

  1. 类型正交于表 普通读书笔记卡
  2. 域即类型:关系理论对类型系统的依赖 普通读书笔记卡
  3. 第一范式本义 普通读书笔记卡
  4. 选择器与THE_运算符如何同时满足域检查与域检查重载 结构图卡
  5. 相等性依赖类型 普通读书笔记卡
  6. 数据值原子性没有绝对含义 普通读书笔记卡
  7. 避免隐式型转 普通读书笔记卡
  8. 类型的正式定义与类型生成器 普通读书笔记卡
  9. 标量类型与非标量类型的区分 普通读书笔记卡
  10. SQL弱类型化与型转导致的诡异"并"运算 普通读书笔记卡
  11. SQL字符序与"相等但可区分"的值 普通读书笔记卡
  12. SQL没有真正的TABLE类型生成器及"类型与表的正交性" 普通读书笔记卡

03

  1. 关系是集合 普通读书笔记卡
  2. 元组的精确定义与"元组从不包含NULL"的推论 普通读书笔记卡
  3. 表不是关系 普通读书笔记卡
  4. 元组相等性的精确定义及其重要性 普通读书笔记卡
  5. DEE与DUM 普通读书笔记卡
  6. SQL行与元组的关键差异 普通读书笔记卡
  7. 列名胜过位置 普通读书笔记卡
  8. 关系的精确定义与"关系"命名之谜 普通读书笔记卡
  9. 关系是n维的而非二维的 普通读书笔记卡
  10. 关系比较运算符与IS_EMPTY测试 普通读书笔记卡
  11. TABLE_DUM与TABLE_DEE:关系代数中的0 结构图卡
  12. SQL列命名与位置依赖:关系化使用SQL的实践规则 操作参考卡

04

  1. 重复抑制优化 普通读书笔记卡
  2. 重复行破坏优化器的表达式变换能力 普通读书笔记卡
  3. DISTINCT是防线 普通读书笔记卡
  4. SQL查询结果中重复的产生与"真重复"的辨识困境 普通读书笔记卡
  5. null破坏逻辑 普通读书笔记卡
  6. 避免重复的实践规则:DISTINCT与ALL的陷阱 操作参考卡
  7. 禁止null优先 普通读书笔记卡
  8. NULL与三值逻辑:逻辑正确与现实正确的分离 普通读书笔记卡
  9. 外连接是妥协 普通读书笔记卡
  10. NULL违反信息原理及SQL自身3VL支持的内在缺陷 普通读书笔记卡
  11. 避免NULL的实践规则:NOT NULL约束与COALESCE 操作参考卡
  12. 外连接是被null填充的"并"运算 普通读书笔记卡

05

  1. 更新是集合级 普通读书笔记卡
  2. 更新是集合级别的运算 普通读书笔记卡
  3. 赋值原理 普通读书笔记卡
  4. 关系赋值统一INSERT/DELETE/UPDATE与赋值原理 普通读书笔记卡
  5. 键必须不可约 普通读书笔记卡
  6. 候选键的精确定义:唯一性与不可约性 普通读书笔记卡
  7. 谓词定义关系变量 普通读书笔记卡
  8. 超键与函数依赖恒成立 普通读书笔记卡
  9. 类型给词汇 普通读书笔记卡
  10. 外键的精确定义与SQL FOREIGN KEY语法差异 普通读书笔记卡
  11. 参照操作不属于关系模型但可合理叠加 普通读书笔记卡
  12. 关系变量谓词与命题:及闭合世界假设 结构图卡
  13. 类型与关系的逻辑区别:数据库是一个逻辑系统 普通读书笔记卡

06

  1. 闭包支撑组合 普通读书笔记卡
  2. Tutorial D与SQL属性对应方式的根本差异及SQL的高度冗余 普通读书笔记卡
  3. 限制是谓词与 普通读书笔记卡
  4. 类型推理规则与RENAME运算符的必要性 普通读书笔记卡
  5. 投影是存在量词 普通读书笔记卡
  6. 限制的精确定义与"SELECT不是限制"的辨析 普通读书笔记卡
  7. 连接合并谓词 普通读书笔记卡
  8. 投影的精确定义、空元投影与ALL BUT语法 普通读书笔记卡
  9. 自然连接的精确定义及"交"与"积"是连接的特例 结构图卡
  10. SQL四种显式JOIN写法的实践建议 操作参考卡
  11. 并/交/差的精确定义与CORRESPONDING实践建议 操作参考卡
  12. 哪些运算符是基本的:"基本"与"有用"的区别 普通读书笔记卡
  13. 关系表达式的谓词含义可由关系变量谓词推导 普通读书笔记卡
  14. SELECT-FROM-WHERE的概念语义:积→限制→投影三步模型 结构图卡
  15. 表达式变换与优化的分配律/交换律/结合律 普通读书笔记卡
  16. 属性名依赖问题与程序内外部数据独立定义的正确方案 普通读书笔记卡

07

  1. 半连接问存在 普通读书笔记卡
  2. 排他并与半连接/半差:三个实践重要的附加运算符 普通读书笔记卡
  3. 除表达全部 普通读书笔记卡
  4. EXTEND扩展运算符与SQL SELECT-FROM-WHERE模板的局限 普通读书笔记卡
  5. 聚集需空集语义 普通读书笔记卡
  6. 映像关系的精确定义与"!!"运算符 普通读书笔记卡
  7. 排序不是关系 普通读书笔记卡
  8. 除运算符的局限性:为什么应被映像关系取代 普通读书笔记卡
  9. SQL聚集运算符的三重缺陷 普通读书笔记卡
  10. SUMMARIZE与GROUP BY/HAVING的逻辑冗余性及陷阱 操作参考卡
  11. EXTEND可以替代SUMMARIZE,映像关系在EXTEND中更有用 普通读书笔记卡
  12. 关系值属性(RVA)使外连接变得多余 普通读书笔记卡
  13. RVA在基关系变量中的设计取舍与关系比较对RVA的隐式依赖 普通读书笔记卡
  14. "WHAT IF"查询揭示UPDATE的完整展开机制 普通读书笔记卡
  15. 递归与传递闭包的不动点定义及SQL递归查询违反闭包的陷阱 结构图卡
  16. ORDER BY不是关系运算符:它不是函数 普通读书笔记卡

08

  1. 约束近似真实 普通读书笔记卡
  2. 类型约束的精确定义:POSSREP与选择器/THE_运算符的一一对应 普通读书笔记卡
  3. 黄金法则 普通读书笔记卡
  4. SQL不支持类型约束的后果与弥补建议 普通读书笔记卡
  5. 立即检查约束 普通读书笔记卡
  6. 数据库约束的分类:元组约束与AND聚集表述法 普通读书笔记卡
  7. 声明式约束 普通读书笔记卡
  8. 函数依赖的精确定义及为何通常不需要专门声明 普通读书笔记卡
  9. 语义优化依赖约束 普通读书笔记卡
  10. SQL空表约束自动满足的陷阱 普通读书笔记卡
  11. ACID一致性不等于正确性,及"事务不是完整性单位" 普通读书笔记卡
  12. 数据库约束必须立即检查的理由与语义优化 普通读书笔记卡
  13. 多重赋值:解决"延迟检查"困境的更优方案 普通读书笔记卡
  14. 约束与谓词:逻辑正确与现实正确的分离及爆炸原理 普通读书笔记卡
  15. 参照完整性是"元约束",及转换约束与状态约束的区别 普通读书笔记卡

09

  1. 视图也是关系变量 普通读书笔记卡
  2. 视图是关系变量:表和视图并非不同事物 普通读书笔记卡
  3. 互换性原理 普通读书笔记卡
  4. 互换性原理及其重要推论 普通读书笔记卡
  5. 视图谓词派生 普通读书笔记卡
  6. 关系常量与命名常量的逻辑区别 普通读书笔记卡
  7. 视图更新要守恒 普通读书笔记卡
  8. 视图谓词是派生谓词 普通读书笔记卡
  9. 视图检索运算的替换过程与"物化"实现违反主旨 普通读书笔记卡
  10. 视图约束是派生约束,且可表达基表层面难以直接表达的约束 普通读书笔记卡
  11. 视图更新失败的本质是违反黄金规则或赋值原理 普通读书笔记卡
  12. SQL视图可更新性规则的复杂混乱及CHECK选项 操作参考卡
  13. 补偿操作机制:级联规则维持多关系变量间派生约束 普通读书笔记卡
  14. 视图的两种用途:简写与逻辑数据独立性 普通读书笔记卡
  15. 视图与快照的区别:物化视图是自相矛盾的用词 普通读书笔记卡

10

  1. 逻辑训练SQL 普通读书笔记卡
  2. 逻辑蕴涵的形式化本质与自然语言直觉的偏离 普通读书笔记卡
  3. 谓词变命题 普通读书笔记卡
  4. 联结词的交换性陷阱:SQL求值顺序不能依赖联结词交换律 普通读书笔记卡
  5. 量词决定语义 普通读书笔记卡
  6. 谓词是真值函数:n元谓词分类与两条推理规则 普通读书笔记卡
  7. 不一致推出任意 普通读书笔记卡
  8. 量词化的精确定义与量词跟联结词的逻辑区别 普通读书笔记卡
  9. 完全量词化产生的命题及量化顺序规则 结构图卡
  10. 自由变元与约束变元的区分:是引用的出现而非变元本身 普通读书笔记卡
  11. 关系演算的基本结构:区间变元+原型元组+WHERE谓词 结构图卡
  12. SQL的EXISTS不是真正的三值逻辑存在量词 普通读书笔记卡
  13. 前束范式及其"未必最自然"的提醒 普通读书笔记卡
  14. UNIQUE量词及SQL近似实现 普通读书笔记卡
  15. FORALL和EXISTS可以互相定义,SQL缺FORALL导致双重否定困境 普通读书笔记卡
  16. 空区间陷阱:FORALL在空集合上恒为真的反直觉后果 普通读书笔记卡
  17. IS_EMPTY/COUNT等价关系及COUNT替代EXISTS的性能陷阱 普通读书笔记卡
  18. 不一致数据库中量词求值的具体演示 普通读书笔记卡

11

  1. 蕴涵可改写 普通读书笔记卡
  2. 表达式变换法则工具箱 结构图卡
  3. 全称用不存在 普通读书笔记卡
  4. 蕴涵律实战:约束从IF...THEN...到SQL CHECK的映射 操作参考卡
  5. COUNT常误导 普通读书笔记卡
  6. 全称量词化的系统化SQL映射步骤 操作参考卡
  7. 远离ALLANY 普通读书笔记卡
  8. NULL让"逻辑等价"的SQL改写产生不同的错误答案 普通读书笔记卡
  9. 相关子查询到IN子查询的变换法则及适用边界 操作参考卡
  10. 命名子表达式技术简化复杂变换的推导过程 普通读书笔记卡
  11. 空区间陷阱在实际查询中的呈现及DIVIDE的再次暴露 普通读书笔记卡
  12. 自然语言查询的固有模糊性及逆否命题法则 普通读书笔记卡
  13. UNIQUE量词到SQL的映射陷阱 操作参考卡
  14. ALL或ANY比较的语义陷阱与建议 操作参考卡
  15. GROUP BY/HAVING与显式演算表述在"零匹配"场景下的语义差异 普通读书笔记卡

12

  1. 慎用SELECT星 普通读书笔记卡
  2. SELECT星号的双刃剑 操作参考卡
  3. 显式区间变元 普通读书笔记卡
  4. 名称限定原则与不可限定的语法上下文 操作参考卡
  5. 避开非确定性 普通读书笔记卡
  6. 区间变元的精确定义与"相关名称不是别名"的严重误称 普通读书笔记卡
  7. 子查询三分类及空表型转规则 普通读书笔记卡
  8. "可能非确定性"表达式的判定规则 普通读书笔记卡
  9. SQL对空集合处理的系统性缺陷清单 结构图卡

13

  1. 关系模型是理论 普通读书笔记卡
  2. 信息原理 普通读书笔记卡
  3. 数据子语言目标 普通读书笔记卡
  4. 唯一关系模型 普通读书笔记卡

14

  1. SQL偏离累积 普通读书笔记卡
  2. 检查偏离点 普通读书笔记卡

15

  1. 分解代替null 普通读书笔记卡
  2. 缺失原因建模 普通读书笔记卡
  3. 未知来自认知 普通读书笔记卡

16

  1. 建议服务原理 普通读书笔记卡
  2. 知道自己在做什么 普通读书笔记卡

相关主题

暂无公开主题。