关系数据库与业务建模
MySQL、SQLAlchemy 与数据库设计#Python全栈#第十四阶段#MySQL、SQLAlchemy 与数据库设计#关系数据库与业务建模约 1189 字 · 3 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
本阶段学习说明
整体培养方向: Python 全栈开发就业,按北京 10~20k 岗位所需能力逐步推进。
本阶段定位: 承接 Web 框架与接口设计,学习关系建模、SQL 查询、索引、事务和 SQLAlchemy,将练习项目的临时数据替换为可靠的数据库持久化。
适用环境: MySQL 8.4、InnoDB 与 SQLAlchemy 2.0 风格 API 作为题目基线;数据库驱动、Alembic 和异步库使用兼容版本。字符集、排序规则、SQL 模式与隔离级别按实际环境核对,不直接套用 SQLite 或其他数据库的行为。
考查目标: 能把业务关系转换为表、约束和查询,管理 ORM 会话与事务,通过执行计划和日志定位问题,并交付可迁移、可验证的数据层。
题库结构: 100 道题,每题包含追问;覆盖基础原理、SQL 编写、ORM 行为、接口集成与故障实操。本阶段提供题目,不包含参考答案。数据库集群、主从运维、备份体系和大规模分库分表作为后续扩展;本阶段优先掌握应用开发中的正确性、查询效率和资源管理。
答题约定: SQL 题先说明表结构、约束、数据规模与期望结果,再解释查询;性能题结合执行计划和测量,不只背“索引失效”结论。事务题说明隔离级别、读写方式、并发顺序和失败处理;ORM 题区分对象状态、SQL 发出、事务提交与资源关闭。
关系数据库中的表、行、列、主键和约束分别是什么?
追问 Python 对象与数据库记录如何对应?为什么定义一个类不等于已经建立或修改数据库表?
怎样从题库业务需求识别实体和关系?
追问 用户、题目、分类、标签和练习记录怎样划分?哪些信息应该独立成表,哪些适合作为字段?
一对一、一对多和多对多关系如何落到表结构中?
追问 关联表中增加创建时间、顺序或其他业务属性时,为什么不能只把它看作两个 ID 的集合?
自然主键与代理主键各有什么取舍?
追问 手机号、邮箱、自增 ID 和 UUID 分别会受到哪些变更、存储和访问要求影响?主键是否同时解决所有业务唯一性?
数据库唯一约束与应用中的重复检查有什么区别?
追问 两个请求同时通过“先查询再插入”检查时会发生什么?怎样用约束和异常反馈确保唯一性?
外键约束可以保证什么,又不能保证什么?
追问 引用记录存在与当前用户有权操作该记录有什么区别?为什么外键不等于权限校验?
第一、第二和第三范式怎样帮助减少数据异常?
追问 重复保存分类名称可能带来什么更新问题?为什么实际设计还需要考虑查询和历史记录需求?
什么时候可以适度冗余或保存历史快照?
追问 订单成交价格与商品当前价格、作答时题目版本怎样区分?如何安排快照生成与后续一致性?
软删除、归档和状态字段应怎样建模?
追问 查询默认范围、唯一约束、恢复和关联记录如何处理?为什么 deleted_at 不会自动让全部查询忽略记录?
多租户表结构应如何表达数据归属?
追问 tenant_id、业务唯一约束和跨表关联怎样配合?共享数据库不意味着应用可以忽略所有查询中的租户范围。