Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f14db433d2 |
@@ -500,3 +500,66 @@ dev/statistics
|
|||||||
• 分支管理
|
• 分支管理
|
||||||
|
|
||||||
• 合并冲突解决
|
• 合并冲突解决
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ER图解析
|
||||||
|
|
||||||
|
都搞定了。ER 图出了概念 / 物理两张,配套把 FastAPI 项目骨架也搭好了,直接下载就能分给 6 个人开工。
|
||||||
|
|
||||||
|
一、ER 图设计要点
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
图1 概念图保留了需求文档里的 stu_name、class_name 冗余字段,用粉色标出,方便答辩时说明"需求这么写";图2 物理图按第三范式把它们去掉了,改用外键关联——这是你们答辩最容易被追问的点,建议这样答:
|
||||||
|
|
||||||
|
冗余字段会造成数据不一致(学生改名后就业表还是旧名字),所以物理建模时去掉,查询时用 JOIN 实时取;只有在校验高频、性能吃紧的场景才按需冗余。
|
||||||
|
|
||||||
|
6 张表 + 1 张关系表:
|
||||||
|
|
||||||
|
表 对应成员 关键设计
|
||||||
|
|
||||||
|
student B is_deleted 逻辑删除、class_id 外键
|
||||||
|
|
||||||
|
class E head_teacher_id 指向班主任
|
||||||
|
|
||||||
|
teacher E 通用老师表
|
||||||
|
|
||||||
|
score C (student_id, exam_no) 联合唯一,防止同一考次重复录入
|
||||||
|
|
||||||
|
employment D student_id 唯一,一人一条就业记录
|
||||||
|
|
||||||
|
class_teacher E 班级↔老师多对多,带 subject 区分授课/带班
|
||||||
|
|
||||||
|
二、项目骨架结构
|
||||||
|
|
||||||
|
|
||||||
|
wolin_student_system/
|
||||||
|
├── requirements.txt
|
||||||
|
├── README.md ← 含分工表 + 启动命令
|
||||||
|
└── app/
|
||||||
|
├── main.py ← A 负责:入口、路由挂载
|
||||||
|
├── config.py ← 数据库 URL(读 .env)
|
||||||
|
├── database.py ← engine + Session
|
||||||
|
├── dependencies.py ← get_db
|
||||||
|
├── exceptions.py ← 统一异常
|
||||||
|
├── models/ ← 6 个成员各占一个文件
|
||||||
|
├── schemas/ ← Pydantic 请求/响应模型
|
||||||
|
├── routers/ ← 各成员主战场(已写好接口骨架+TODO)
|
||||||
|
└── services/ ← 复杂查询放这里
|
||||||
|
|
||||||
|
|
||||||
|
骨架里的贴心细节:
|
||||||
|
• 每个 router 文件里已经把需求文档要求的接口按路径签名写好(参数、装饰器、docstring 齐全),成员只要往里填实现,不用从零对着文档想接口名,避免 6 个人命名风格打架。
|
||||||
|
|
||||||
|
• models 用 SQLAlchemy 2.0 的 Mapped 新写法,relationship 已配好双向关联(比如 student.scores、class.students)。
|
||||||
|
|
||||||
|
• schemas/common.py 提供了 PageResponse 分页包装和 ApiResponse 统一返回结构,全组复用,前端解析方便。
|
||||||
|
|
||||||
|
三、给组长的合并建议
|
||||||
|
|
||||||
|
1. 你先把 dev/base 推上去,其他人 rebase 而不是 merge 你的更新,历史更干净。
|
||||||
|
2. 约定好冲突高发区:app/main.py(路由挂载)和 app/models/__init__.py(模型导出)这两个文件让各成员只改自己那一行,别整文件覆盖。
|
||||||
|
3. routers/__init__.py 和 models/__init__.py 建议由你统一维护,别人提 PR 时只改自己的 router 文件。
|
||||||
|
|
||||||
|
需要我接着做哪个?比如:把统计模块的 SQL 全部写出来、补一份 .env.example + Alembic 迁移配置、或者按这个骨架把某个模块(比如成绩管理)的实现代码直接填满。
|
||||||
Reference in New Issue
Block a user