--- title: SQL与数据库设计 tags: - module - database - sql - design - joplin type: module source_type: reconstructed created: 2026-04-22 updated: 2026-04-22 --- # SQL与数据库设计 > [!abstract] > 这一模块讨论“数据库怎么用、怎么设计”两个问题。SQL 负责对数据进行声明式操作,数据库设计负责让这些操作建立在合理结构上。 ## 模块结论 - [[SQL]] 的价值在于声明式、面向集合和综合统一,而不是单纯“会写语句”。 - 视图、索引、存储过程、触发器分别在抽象、安全、性能和自动化规则上发挥作用。 - 数据库设计的关键不是画图本身,而是把业务对象和关系稳定地落成结构良好的模式。 ## 一、SQL 的核心特点 - 综合统一:兼顾定义、操纵、控制等多种功能。 - 高度非过程化:重点描述“要什么”,不是“怎么一步步做”。 - 面向集合:一次操作一组元组,而不是默认逐行处理。 ### 常见分类 - DDL:定义数据库对象,如 `CREATE`、`ALTER`、`DROP`。 - DML:插入、更新、删除数据。 - DQL:查询数据。 - DCL:授权、回收权限。 ## 二、SQL 查询思维 - 先明确数据来自哪些表。 - 再明确筛选条件、连接条件和需要输出的列。 - 最后判断是否需要分组、聚合、排序、嵌套。 ### 高频查询类型 - 单表筛选 - 多表连接 - 分组聚合 - 嵌套查询 - 全称查询和存在性查询 ### 易错点 - 把连接条件写成筛选条件,导致笛卡尔积。 - 不理解 `GROUP BY` 和 `HAVING` 的职责区别。 - 只会写语句模板,不理解它背后的关系代数意义。 ## 三、视图、索引、存储过程、触发器 ### 视图 - 本质是虚表,数据来自基本表。 - 作用包括简化复杂查询、隐藏敏感字段、提供一定逻辑独立性。 ### 索引 - 本质是辅助查找结构,用空间换时间。 - B+ 树适合范围查询和有序访问。 - Hash 索引更适合等值查询。 ### 存储过程与触发器 - 存储过程:显式调用的一组预编译 SQL。 - 触发器:由特定事件自动触发执行。 ## 四、数据库设计方法 ### 六个阶段 1. 需求分析 2. 概念设计 3. 逻辑设计 4. 物理设计 5. 实施 6. 运行维护 ### E-R 到关系模式的转换 - 1:1 联系:可并入任一方或单独处理。 - 1:n 联系:通常在 n 方加入 1 方主键。 - m:n 联系:通常新建关联表。 ### 设计时要处理的冲突 - 命名冲突 - 属性冲突 - 结构冲突 ## 五、设计与性能的关系 - 合理的范式减少异常和冗余。 - 合理的索引降低查询成本。 - 逻辑设计和物理设计不能割裂看。 ## 六、复习提问 - SQL 为什么说是声明式、面向集合的语言? - 视图和索引分别在解决什么问题? - E-R 图中的 1:n 和 m:n 联系该如何转成表结构? ## 来源 - [[raw/Joplin/计算机专业基础/数据库/_计算机考研复试数据库核心知识点整理.md]] - [[raw/Joplin/计算机专业基础/数据库/3.数据库——SQL与数据库设计.md]] ## 相关页面 - [[数据库]] - [[关系数据库核心]] - [[SQL]] - [[范式]]