# 数字日记本系统——日记数据库管理模块 教学设计

| **课题** | **数字日记本系统——日记数据库管理模块** |
|---------|------------------------------------------|
| **课时** | 1课时(40分钟) |
| **教学目标** | **知识目标**: 理解数据库的基本概念及其相对于文本文件的优势，掌握SQLite数据库的特点和应用场景，理解表、记录、字段等数据库术语，掌握SQL语句的基本语法（CREATE、INSERT、SELECT）。<br>**技能目标**: 能够使用Python的sqlite3模块连接数据库、创建数据表、执行增删改查操作，实现日记数据从文件存储到数据库存储的迁移，能编写按日期、关键词查询日记的功能代码。<br>**素养目标**: 建立"结构化数据管理提升系统能力"的工程意识，培养数据建模思维（设计合理的表结构），理解数据库在现代应用中的核心地位。 |
| **教学重难点** | **重点**: SQLite数据库的连接与关闭；数据表的创建（CREATE TABLE）；数据的插入（INSERT）和查询（SELECT）；Python与数据库的交互流程（连接→游标→执行→提交→关闭）。<br>**难点**: 理解数据库相对于文本文件的本质优势；设计合理的日记表结构（字段类型选择）；SQL语句的编写和参数化查询（防止SQL注入）；查询结果的处理（fetchall、fetchone）。 |
| **教学资源准备** | 多媒体课件（含数据库原理动画）；SQLite数据库可视化工具（如DB Browser）；上节课的日记文本文件；项目演示视频。 |

## 教学过程

| 教学环节 | 教学内容 | 教师活动 | 学生活动 | 设计意图 |
|:---------|:---------|:---------|:---------|:---------|
| **1. 问题情境导入**<br>(6分钟) | 回顾文本文件存储方案，演示在大量日记中查找特定内容的困难（需要逐行读取和字符串匹配），引出数据库的必要性，明确本课时任务：将日记迁移到数据库实现高效管理。 | **效率对比**<br>演示在包含100条日记的文本文件中查找"2026-01-05"的日记，展示代码复杂度和耗时；<br><br>**需求分析**<br>提问："如何像图书馆检索系统一样，通过条件快速找到想要的日记？"引出数据库的索引和查询优势。 | **问题体验**<br>尝试在上节课的日记文件中手动查找特定日期的日记，感受文本查找的低效；<br><br>**概念对比**<br>讨论：文本文件vs数据库，在数据量大、查询频繁时哪个更合适？ | 通过效率问题创造认知需求，让学生理解"为什么需要数据库"；通过类比图书馆检索系统建立数据库查询的直观认知。 |
| **2. 数据库基础知识**<br>(9分钟) | 讲解数据库的基本概念（数据库、表、记录、字段），介绍SQLite的特点（轻量级、无需服务器、单文件），演示数据库可视化工具查看表结构，对比文本存储与数据库存储的差异。 | **概念讲解**<br>用Excel表格类比讲解：数据库=工作簿、表=工作表、记录=行、字段=列；<br><br>**SQLite介绍**<br>讲解SQLite优势：Python内置支持、数据存储在单个.db文件中、适合小型应用；<br><br>**可视化演示**<br>使用DB Browser打开示例数据库，展示表结构和数据查看方式。 | **类比理解**<br>结合Excel使用经验理解数据库结构概念；<br><br>**工具体验**<br>打开示例数据库文件，观察表结构、字段类型、记录内容，建立直观认知。 | 通过Excel类比降低抽象概念的理解难度；通过可视化工具让学生直观看到数据库的组织方式；通过对比建立数据库的核心优势认知。 |
| **3. 数据表创建**<br>(8分钟) | 指导学生设计日记表的结构（字段：id主键、日期、时间、内容、标签），编写Python代码连接数据库并创建表，讲解SQL的CREATE TABLE语法和数据类型。 | **表结构设计**<br>引导设计日记表字段：<br>```sql<br>CREATE TABLE diary (<br>    id INTEGER PRIMARY KEY,<br>    date TEXT,<br>    time TEXT,<br>    content TEXT,<br>    tags TEXT<br>)<br>```<br>讲解主键的作用和TEXT、INTEGER等类型；<br><br>**代码演示**<br>演示Python连接数据库并创建表：<br>```python<br>import sqlite3<br>conn = sqlite3.connect('diary.db')<br>cursor = conn.cursor()<br>cursor.execute('CREATE TABLE ...')<br>conn.commit()<br>conn.close()<br>```<br>强调连接→游标→执行→提交→关闭的标准流程。 | **设计讨论**<br>小组讨论：日记表还需要哪些字段？心情、天气、地点等如何设计？<br><br>**编码实践**<br>编写代码创建日记数据表，运行后用可视化工具验证表是否创建成功。 | 通过表结构设计培养数据建模思维；通过标准操作流程建立规范的数据库编程习惯；通过可视化验证增强成功反馈。 |
| **4. 数据插入与查询**<br>(10分钟) | 指导学生编写日记插入功能（INSERT语句），实现从用户输入到数据库存储的完整流程，编写查询功能（SELECT语句），实现按日期范围和关键词查询日记。 | **插入操作**<br>演示INSERT语法和参数化查询（防SQL注入）：<br>```python<br>cursor.execute(<br>    'INSERT INTO diary (date, time, content) VALUES (?, ?, ?)',<br>    (date, time, content)<br>)<br>```<br>强调使用占位符?而非字符串拼接；<br><br>**查询操作**<br>演示SELECT查询：<br>```python<br># 查询所有<br>cursor.execute('SELECT * FROM diary')<br>results = cursor.fetchall()<br># 按日期查询<br>cursor.execute('SELECT * FROM diary WHERE date=?', (target_date,))<br>```<br>讲解WHERE子句和LIKE模糊查询。 | **插入功能**<br>编写add_diary_to_db()函数，获取用户输入并插入数据库，测试添加多条日记；<br><br>**查询功能**<br>编写query_by_date()和query_by_keyword()函数，实现按日期精确查询和按内容模糊查询，验证查询结果。 | 通过参数化查询强调安全编程意识；通过完整功能实现将SQL语句转化为实用技能；通过多样化查询体现数据库的强大查询能力。 |
| **5. 功能整合与迁移**<br>(5分钟) | 指导学生将上节课文本文件中的日记数据批量导入数据库，整合菜单系统（添加数据库查询选项），对比文件和数据库两种方案的效果差异。 | **数据迁移**<br>演示读取文本文件并批量插入数据库的代码逻辑：<br>```python<br>with open('diary.txt', 'r') as f:<br>    # 解析每条日记<br>    # 插入数据库<br>```<br><br>**系统升级**<br>指导在菜单中添加"按日期查询"、"按关键词查询"等新选项。 | **数据导入**<br>编写迁移脚本，将文本日记批量导入数据库；<br><br>**效果对比**<br>测试查询功能，对比文本文件遍历和数据库查询的速度和便利性。 | 通过数据迁移实现新旧系统的平滑过渡；通过效果对比让学生直观感受数据库的优势；通过系统升级体验技术进步带来的能力提升。 |
| **6. 总结与展望**<br>(2分钟) | 总结数据库的核心优势和SQL基本语句，对比文本文件与数据库的适用场景，预告下节课将学习JSON格式实现跨平台数据备份和迁移。 | **知识梳理**<br>回顾数据库操作流程和SQL四大语句（CRUD）；<br><br>**场景引导**<br>提问："如果想把日记备份到手机或分享给朋友，数据库文件能直接用吗？"引出数据交换格式的需求。 | **反思总结**<br>总结数据库带来的能力提升：快速查询、结构化管理、数据完整性；<br><br>**思考问题**<br>思考：如何实现数据的跨平台、跨系统共享？ | 通过总结强化数据库核心知识；通过问题引导为下节课JSON数据交换学习做铺垫，保持项目逻辑的连贯性。 |

## 板书设计

```
数字日记本系统 - 数据库管理方案

数据库操作五步骤              SQL四大操作(CRUD)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 连接数据库 connect()      Create - INSERT ➕
② 创建游标   cursor()       Read   - SELECT 🔍
③ 执行SQL    execute()      Update - UPDATE ✏️
④ 提交事务   commit()       Delete - DELETE ❌
⑤ 关闭连接   close()

日记表结构设计：
┌──────────────────────────────────┐
│ diary 表                         │
├──────┬─────────┬─────────────────┤
│ id   │ INTEGER │ PRIMARY KEY ⭐  │
│ date │ TEXT    │ 日期 2026-01-07 │
│ time │ TEXT    │ 时间 15:30      │
│ content │ TEXT │ 日记内容        │
│ tags │ TEXT    │ 标签(可选)      │
└──────┴─────────┴─────────────────┘

查询示例：
WHERE date='2026-01-07'      # 精确查询
WHERE content LIKE '%学习%'  # 模糊查询

核心优势：
✓ 结构化存储  ✓ 高效查询  ✓ 数据完整性
```

## 教学成效与反思

| | |
|:---|:---|
| **教学成效** | 本课时成功将数据库编程知识融入日记系统的升级改造任务中，约75%的学生能够准确说明数据库相对于文本文件的核心优势并设计合理的表结构。全体学生完成了数据表创建和基本的增删改查操作，其中70%以上能够独立编写按日期和关键词查询的功能代码。通过文本文件与数据库查询的效率对比实验，学生对"为什么需要数据库"有了深刻的直观认知。数据迁移环节让学生体验了技术升级的完整过程，成就感强烈。部分学生主动提出增加"按心情筛选"、"标签分类"等扩展功能，显示出较强的创新意识和学习主动性。 |
| **教学反思** | 本课时通过"查询效率对比"成功建立了从文本文件到数据库的技术升级需求，学生的学习动机明确。Excel类比和可视化工具的使用有效降低了数据库抽象概念的理解难度。SQL语句的讲解结合项目实际需求，避免了语法学习的枯燥感。不足之处：①数据库连接的"连接→游标→执行→提交→关闭"流程对部分学生来说较为陌生，容易遗漏commit()或close()步骤导致数据未保存或资源泄漏，应提供更醒目的流程提示卡；②参数化查询（占位符?）的必要性（防SQL注入）讲解不够充分，部分学生仍使用字符串拼接，安全意识培养不足，后续应增加SQL注入攻击的演示案例；③数据迁移脚本编写时，日期时间的解析和格式转换难度较大，部分学生出错率高，可考虑提供正则表达式或字符串处理的辅助函数。改进方向：制作数据库操作流程的可视化图卡便于学生参考；设计一个"SQL注入危害"的演示实验增强安全意识；为数据迁移任务提供数据解析的工具函数模板。整体来看，项目的技术升级路线清晰，学生在实践中体会到了数据库的强大能力，为后续复杂应用开发奠定了基础。 |