Access 2003教学数据库实战:从E-R建模到SQL查询与数据交换

发布时间:2026/10/11 14:20:11
Access 2003教学数据库实战:从E-R建模到SQL查询与数据交换 简介本资源是一份面向高校数据库课程初学者的《数据库及其应用》实验报告聚焦Access 2003环境下的数据库设计与实操能力培养适用于计算机、信息管理等专业学生完成课程实验、备考或巩固关系型数据库核心技能。报告完整覆盖三大核心模块实验项目1详解数据库与表的创建、主键/外键设置及三类完整性实体、参照、用户定义的实现项目2系统讲解选择查询、SQL增删改查语句及动作查询应用项目3详述Access与Excel/文本文件的导入、导出及链接机制。资源为单个PDF文件342KB内容结构清晰含实验目的、设备要求、详细操作步骤、字段设计表学院/专业/学生/课程/成绩单五表、E-R模型转换说明及关系建立要点便于对照学习与复现。目前已有77人下载学习是掌握传统桌面数据库开发流程的实用入门材料。1. 这不是一份普通实验报告它是 Access 2003 时代最完整、可复现的数据库教学黑匣子如果你正在找一份能真正带你从零建起“教学管理系统”、手把手配好参照完整性、用 SQL 写出带TOP 1和HAVING AVG()80的真实查询、还能把成绩单导出成 CSV 再原样导入回来的实操文档——那你没点错。这份《数据库及其应用实践报告.pdf》不是模板填空它是一份 2012 年真实课堂产出的、带完整字段约束、输入掩码、查阅向导、父子表展开、交叉表生成、甚至含INSERT INTO 课程 VALUES(06020101,会计学原理,3,06)这种可直接粘贴执行的原始命令的工程级笔记。它不讲抽象理论只解决你明天就要交的实验怎么让“学院号”在专业表里下拉选择、“生日”字段自动红字中文显示、“成绩”小数位强制 1 位且蓝色、“学号”输错位数立刻弹窗报错。它面向的是刚装好 Access 2003、连“关系窗口”在哪都得翻三遍菜单的新手也服务于想快速验证参照完整性级联删除是否生效、或排查“为什么导出 Excel 后日期变成数字”的老手。这不是 PDF 阅读材料这是你打开 Access 后按章节顺序敲一遍就能跑通整套学生-专业-课程-成绩闭环的作战地图。2. 从 E-R 图到 .MDB 文件手把手构建教学管理数据库物理结构2.1 概念设计 → 逻辑设计 → 物理落地三步踩实建库根基这份报告最硬核的地方在于它把教科书里的“E-R 模型→关系模型”转化成了可执行的字段清单。你看它没空谈“实体”“联系”而是直接给出五张表的字段定义表学院表学院号/文本4/主键、专业表专业号/文本6/主键 学院号/文本4/外键、学生表学号/文本8/主键 专业号/文本6/外键、课程表课程号/文本8/主键 学院号/文本2/外键、成绩单学号课程号/联合主键 成绩/数字/精度4/约束≥0≤100。这个结构不是拍脑袋来的——它严格对应题目中“一个专业属于一个学院”“每门课程由一个学院开设”“学生选修课程获得成绩”的业务规则。关键点在于所有外键字段名必须与父表主键名完全一致如专业表的“学院号”必须和学院表的“学院号”同名否则后续建立关系时拖拽会失败。我当年第一次做就栽在这儿把专业表的外键写成“所属学院号”结果关系线根本连不上调试半小时才发现是命名不统一。2.2 创建 .MDB 数据库文件路径、命名、版本的三个铁律报告要求数据库保存在“教学管理”文件夹中文件名为“教学管理.MDB”。这看似简单但藏着三个易被忽略的细节路径不能含中文或空格虽然 Windows XP 允许但 Access 2003 在某些操作如链接外部数据时会因路径解析异常报错。我建议你新建一个纯英文路径比如C:\db_practice\teaching_management\文件名必须带.MDB扩展名Access 2003 不识别无扩展名或.ACCDB那是 2007 的格式若你双击创建后系统默认存为教学管理无扩展名需手动重命名为教学管理.MDB必须用 Access 2003 创建若你用高版本 Access如 2016另存为.MDB格式部分特性如特定输入掩码语法00000000;;可能被降级或失效。血泪经验宁可去下载一个官方 Access 2003 试用版微软仍提供 ISO 镜像也不要冒险用新版兼容模式。2.3 表设计器实操主键、索引、Null 值的设置逻辑以“学院表”为例报告要求学院号文本/宽度4/主键、学院名文本/宽度16、院长文本/宽度8。在 Access 2003 设计器中操作如下在“字段名称”列输入学院号在“数据类型”列选“文本”在“字段属性”下方的“字段大小”框中输入4点击工具栏上的“主键”按钮钥匙图标此时学院号左侧出现钥匙标记输入学院名类型“文本”大小16输入院长类型“文本”大小8重点在院长行的“字段属性”面板中找到“允许 Null 值”选项确认其值为“Yes”即打勾。因为院长可能暂缺业务上允许为空而学院号因为主键系统自动设为“No”无需手动操作。提示主键字段的“允许 Null 值”永远是“No”这是实体完整性的强制要求。若你误将非主键字段设为“No”却未填数据保存记录时会直接报错“该字段不允许 Null 值”。2.4 建立表间关系实施参照完整性与级联操作的实战配置所有表建完后点击工具栏“关系”按钮进入关系视图。按报告要求需建立四组关系学院 ↔ 专业拖拽学院表的“学院号”到专业表的“学院号”弹出“编辑关系”对话框 → 勾选“实施参照完整性” → 勾选“级联更新相关字段” →不勾选“级联删除相关记录”报告原文未要求且教学场景中删除学院前必须先清空下属专业强制不级联可防误删专业 ↔ 学生同理拖拽专业表“专业号”到学生表“专业号”勾选“实施参照完整性”其余不选学院 ↔ 课程拖拽学院表“学院号”到课程表“学院号”勾选“实施参照完整性”学生课程 ↔ 成绩单这是多对多关系需用联合主键。在成绩单表中学号和课程号均设为主键按住 Ctrl 多选后点主键按钮再分别拖拽学号到学生表学号、课程号到课程表课程号两组均勾选“实施参照完整性”。玄学排查点若拖拽后关系线是虚线而非实线说明“实施参照完整性”未生效。原因通常是① 子表外键字段数据类型与父表主键不一致如父表是“文本4”子表设成“文本6”② 子表外键字段未建索引Access 要求外键必须有索引设计器中右键字段 → “索引” → 选“有有重复”。2.5 录入数据的生死顺序为什么先输学院最后输成绩单报告强调“输入时应该先输入被引用数据的表记录然后再输入用其他表数据的记录”。这是参照完整性的铁律。具体顺序为学院表录入01,计算机学院,张院长、02,法学院,李院长等专业表录入0101,软件工程,工科,01注意01必须已在学院表存在学生表录入20200001,张三,男,#1998-05-10#,汉,湖北,...,01010101必须已在专业表存在课程表录入CS101,数据库原理,3,0101必须已在学院表存在成绩单录入20200001,CS101,8520200001和CS101必须分别在学生表、课程表存在。翻车现场若你跳过第2步直接在专业表输0101再在学生表输20200001,...,0101Access 会弹窗“无法添加记录。在相关表中未找到引用的值。”——这就是参照完整性在咬你。3. 字段属性深度控制从黄色民族到蓝色成绩的视觉化约束3.1 显示格式用[黄色]和#.#[蓝色]实现条件渲染Access 2003 的字段格式设置是前端交互的雏形。报告要求“民族”字段黄色显示操作路径设计视图 → 选中“民族”字段 → 在“字段属性”面板的“格式”行输入[黄色]。这里是占位符表示显示字段值本身[黄色]是颜色指令。同理“生日”字段要中文红色显示格式设为dddddd[红色]dddddd是 Access 的中文长日期格式代码输入掩码设为年月日;0;分号后0表示空值显示为空白。关键参数说明ddddddAccess 日期格式代码d代表日dd是两位日dddd是星期全称dddddd组合后实际渲染为“2023年10月25日 星期三”这类中文格式[红色]颜色指令支持[黑色]、[蓝色]、[绿色]、[青色]、[红色]、[品红]、[黄色]、[白色]八种输入掩码年月日;0;分号分隔三段第一段年月日是掩码模板第二段0是空值显示方式0空白1Null第三段为空默认。3.2 输入掩码用00000000锁死 8 位纯数字学号“学号”字段要求 8 位文本且每位为 0-9。报告给出掩码00000000;;。其中0表示必须输入数字0-9不可为空;分隔符第一个;后是空值处理第二个;后是Password属性此处为空即不隐藏;;结尾表示空值显示为空白且无密码掩码。实测对比若你误用#########表示可选数字用户可输123就保存导致长度不一而00000000强制输满 8 位少一位就卡住光标。进阶技巧对“课程号”如CS101可用掩码LL000L必须字母0必须数字确保前两位是字母、后三位是数字。3.3 查阅向导下拉列表与列表框的两种绑定逻辑报告要求为“专业类别”设下拉列表自行键入值为“学院号”设列表框从学院表取值。二者本质不同下拉列表ComboBox适合枚举值固定且少的字段如“工科/理科/文科”。操作设计视图 → 选中“专业类别” → 字段属性 → “查阅”页 → “查阅向导” → 选“自行键入值” → 输入工科、理科、文科→ 完成。此时字段存储的就是你输入的文本值列表框ListBox适合关联主表存储外键值。操作设计视图 → 选中“学院号” → 字段属性 → “查阅”页 → “查阅向导” → 选“使用现有表或查询中的字段” → 选“学院”表 → 选“学院号”和“学院名”两字段 → 设“学院号”为绑定列即实际存储的值→ 设“学院名”为显示列即下拉看到的文字。注意列表框绑定后“学院号”字段在数据表视图中显示的是“学院名”但底层存储的仍是01、02这样的代码这才是关系数据库的正确姿势。3.4 用户定义完整性用表达式0 and 100守住成绩底线成绩单的“成绩”字段要求 0-100 分。报告在字段属性中设置“有效性规则”为0 and 100“有效性文本”为“成绩必须在0-100之间”。这是用户定义完整性的核心手段。参数深挖0 and 100Access 中的布尔表达式and必须小写和是标准比较符“有效性文本”当用户输入101时弹出的提示语必须填写否则报错信息是冷冰冰的“违反有效性规则”触发时机此规则在“离开当前字段”或“保存整条记录”时校验不是实时校验。若你想实时拦截需配合 VBA 事件但报告未涉及属进阶。3.5 数据表视图操作筛选、排序、父子展开的快捷键矩阵数据表视图是日常操作主战场。报告提到三点父子表展开在已建立关系的表中如学生表左侧有号点击可展开关联的“成绩单”子表查看该学生的全部成绩。这是 Access 的嵌套表功能比写 JOIN 查询更直观按成绩排序鼠标移至“成绩”列标题光标变 ↓ 箭头时单击即按升序排列再点一次变 ↓↑为降序按性别筛选菜单栏 → 记录 → 筛选 → 按窗体筛选 → 在“性别”行下拉选“女” → 点“应用筛选”。隐藏技巧筛选后地址栏会显示筛选器性别女此时按CtrlShiftF可快速清除筛选。4. SQL 查询实战从 SELECT * 到 TOP 1 的生产级写法4.1 SQL 视图入口与基础语法Access 的 SQL 与标准 SQL 的差异点报告要求“在设计视图中创建查询”后切到 SQL 视图。这是 Access 的特色它提供图形化 QBEQuery By Example界面但底层 SQL 可直接编辑。关键认知Access SQL 是 ANSI-89 标准的方言与 MySQL/PostgreSQL 有差异表连接必须用INNER JOIN ... ON不支持FROM a,b WHERE a.idb.id的旧式写法字符串拼接用如Hello ,World!不是||或CONCAT()日期字面量用#1992-10-8#不是1992-10-8TOP 1位置在SELECT后如SELECT TOP 1 课程号,课程名 FROM ...不能写LIMIT 1。4.2 多表 JOIN 查询三重嵌套 INNER JOIN 的可读性陷阱报告例①查询学院、专业、学生完整数据SQL 为SELECT * FROM ((学院 INNER JOIN 专业 ON 学院.学院号 专业.学院号) INNER JOIN 学生 ON 专业.专业号 学生.专业号);这段 SQL 的括号嵌套是 Access 强制要求的。若你写成SELECT * FROM 学院 INNER JOIN 专业 ON 学院.学院号 专业.学院号 INNER JOIN 学生 ON 专业.专业号 学生.专业号;Access 2003 会报错“JOIN 操作中的语法错误”。解决方案始终用括号明确连接顺序或改用 QBE 界面拖拽自动生成更安全。参数说明ON后的条件必须是“父表主键 子表外键”字段名前必须加表名前缀如学院.学院号否则 Access 无法区分同名字段。4.3 聚合查询与 HAVING为什么 AVG() 不能放 WHERE 里例③查询平均成绩≥80 的学生SQL 为SELECT 学生.学号,姓名,AVG(成绩) AS 平均分 FROM 学生 INNER JOIN 成绩 ON 学生.学号 成绩.学号 GROUP BY 学生.学号,姓名 HAVING AVG(成绩)80;核心原理WHERE在分组前过滤行HAVING在分组后过滤组。AVG(成绩)是聚合函数只能在GROUP BY后的HAVING或SELECT中使用。若你误写WHERE AVG(成绩)80Access 直接报错“尝试对非聚合函数进行聚合”。避坑参数GROUP BY必须包含SELECT中所有非聚合字段学号、姓名否则报错“ORDER BY 子句与 GROUP BY 子句不匹配”。4.4 子查询实战NOT IN 与 EXISTS 的性能分水岭例④查询没有学生数据的专业SQL 为SELECT 专业号,专业 FROM 专业 WHERE 专业号 NOT IN (SELECT 专业号 FROM 学生);这在小数据量时没问题但若学生表有百万行NOT IN会全表扫描。Access 2003 更推荐NOT EXISTSSELECT 专业号,专业 FROM 专业 AS A WHERE NOT EXISTS (SELECT 1 FROM 学生 AS S WHERE S.专业号 A.专业号);为什么更好EXISTS找到第一条匹配就停止NOT IN需确认子查询结果中无任何匹配值且NOT IN遇到NULL会返回空结果这是 SQL 三值逻辑的坑。报告未提此点但这是你上线后必踩的坑。4.5 动作查询INSERT/UPDATE/DELETE 的事务安全边界报告给出三条动作 SQLINSERT INTO 课程 VALUES(06020101,会计学原理,3,06);UPDATE 课程 SET 学分 学分 1 WHERE 学院号 04;DELETE FROM 课程 WHERE 学院号 09 AND 课程号 NOT IN (SELECT 课程号 FROM 成绩);生死提醒动作查询没有撤销执行前务必先备份.MDB文件复制一份教学管理_backup.MDB对UPDATE/DELETE先用SELECT验证条件如SELECT * FROM 课程 WHERE 学院号04确认要更新的课程DELETE中的NOT IN子查询若成绩表为空NOT IN (空集)永远为真导致误删全表应加AND 课程号 IS NOT NULL防御。5. 数据交换全流程从导出 CSV 到导入 Excel 的 7 步排错指南5.1 导出为文本文件逗号分隔、无引号、含字段名的精确配置报告要求将“学生成绩单”查询导出为 CSV字段用逗号分隔、文本不加引号、首行含字段名。操作路径右键查询 → “导出” → 选“文本文件” → 启动“导出文本向导”第一页选“带分隔符每个字段用字符分隔” → 下一步第二页分隔符选“逗号”文本识别符选“无”即不加→ 下一步第三页勾选“第一行包含字段名称” → 下一步第四页指定保存路径完成。关键参数“文本识别符”选“无”避免导出学号,姓名,成绩变成20200001,张三,85后者在 Excel 中可能被识别为单个字符串“第一行包含字段名称”确保 CSV 首行是学号,姓名,专业,课程号,课程名,成绩方便后续导入时自动匹配字段。5.2 导出到 Excel格式保留与自动打开的双刃剑导出到 Excel 的操作右键查询 → “导出” → 选“Microsoft Excel” → 选保存路径 → 勾选“带格式保存”和“自动保存”。玄学现象勾选“自动保存”后Access 会调用 Excel 应用程序打开文件但若你本机没装 Excel只有 WPS会报错。解决方案取消勾选“自动保存”导出后手动用 Excel 打开或安装 Excel Viewer微软免费工具。格式陷阱“带格式保存”会保留 Access 中的字体、颜色但 Excel 可能无法完全渲染如dddddd[红色]在 Excel 中只显示文字不显示红色故生产环境建议关闭此选项用 Excel 自身条件格式重做。5.3 从 CSV 导入四步向导中的字段类型矫正术将导出的 CSV 导入为新表“学生成绩单”操作空白处右键 → “导入” → 选文本文件 → 启动“导入文本向导”第一页选“带分隔符——用逗号或制表符分割” → 下一步第二页分隔符选“逗号”文本识别符选“无”必须与导出时一致→ 下一步第三页选“新表中” → 下一步第四页最关键的字段矫正学号默认可能是“数字”需手动改为“文本”否则00123会变成123成绩默认“数字”保持即可课程名默认“文本”确认宽度足够如 24点“完成”。提示若 CSV 中有中文第四页需在“文本文件编码”下拉框中选“GB2312”简体中文否则导入后是乱码。5.4 从 Excel 导入主键设置与字段映射的强制流程导入 Excel 文件“学生成绩表”右键 → “导入” → 选 Excel 文件 → 启动“导入数据表向导”第一页勾选“第一行包含列标题” → 下一步第二页选“将数据导入新表” → 下一步第三页字段映射学号数据类型选“文本”字段大小8课程号数据类型选“文本”字段大小8成绩数据类型选“数字”字段大小“单精度”或“双精度”其他字段按需设“文本”→ 下一步第四页选“不设置主键”向导不支持联合主键→ 下一步第五页表名填“学生成绩表” → 完成。导入后必做打开新表 → 设计视图 → 按住 Ctrl 选中学号和课程号→ 点“主键”按钮 → 保存。否则该表无主键无法建立关系。5.5 避坑 / 常见问题 / 排查7 条血泪经验总结现象导出 CSV 后用 Excel 打开日期字段显示为44197这类数字。原因Access 导出时将日期转为 Excel 序列号1900-01-01 为 1Excel 未识别为日期格式。解决在 Excel 中选中该列 → 右键 → “设置单元格格式” → “日期” → 选合适格式或在 Access 导出前将日期字段在查询中用Format([生日],yyyy-mm-dd)转为文本。现象从 Excel 导入后“学号”前导零丢失如00123变123。原因Excel 默认将数字开头的文本转为数值导入时 Access 接收为数字。解决导入前在 Excel 中将“学号”列设为“文本格式”选中列 → 右键 → “设置单元格格式” → “文本”或导入向导第三页将“学号”字段类型手动设为“文本”。现象执行DELETE FROM 课程 WHERE 学院号09 AND 课程号 NOT IN (SELECT 课程号 FROM 成绩)后一条记录没删。原因成绩表中课程号有NULL值NOT IN (包含NULL的集合)永远返回False。解决加AND 课程号 IS NOT NULL或改用NOT EXISTS。现象建立“学院↔专业”关系后专业表中学院号字段无法输入01提示“输入的值违反参照完整性”。原因学院表中01记录未提交如刚输入未按回车或 Tab 离开行。解决在学院表中输入01后必须按Tab或Enter确认该行再切到专业表输入。现象在数据表视图中修改“运筹学”学分输入6后无法保存提示“更新或取消更新时发生错误”。原因课程表与学院表的关系被意外删除或学院号字段在课程表中未设索引。解决检查关系图确认连线为实线在课程表设计视图中右键学院号→ “索引” → 设为“有有重复”。现象运行交叉表查询结果中“课程名”列标题显示为课程名: First且数据错位。原因QBE 窗格中“课程名”字段的“总计”行未设为“分组”或“成绩”字段的“总计”行未设为“平均值”/“求和”。解决在查询设计视图 → QBE 窗格 → 点“总计”按钮 → 在“课程名”行的“总计”列选“分组”在“成绩”行的“总计”列选“平均值”。现象参数查询中输入[SR]运行后弹窗要求输入“SR”但输入#1992-01-01#报错。原因参数类型未在“查询参数”对话框中指定为“日期/时间”。解决设计视图 → 查询 → 参数 → 在“参数”对话框中SR的数据类型选“日期/时间”MZ选“文本”。6. 验证数据库健壮性的终极技巧用“断电测试”逼出所有隐性缺陷6.1 关系完整性压力测试强制破坏再修复别只满足于“能建关系”要主动制造断裂来验证机制。方法在关系图中右键“学院↔专业”连线 → “删除关系”在专业表中手动插入一条0102,人工智能,工科,0303学院不存在重新建立关系并勾选“实施参照完整性”尝试保存专业表 —— Access 会报错“无法保存更改。在相关表中未找到引用的值。”价值这证明参照完整性在运行时生效而非仅建表时校验。很多新手以为建好关系就万事大吉其实只有在数据变更时才真正起作用。6.2 字段约束穿透测试用边界值挑战每一处有效性规则对所有带约束的字段输入极端值成绩输-1、101、abc确认弹窗提示学号输1237位、1234567899位、a1234567含字母确认输入掩码拦截生日输2025-01-01未来日期看是否通过报告未设日期约束故应通过。技巧在数据表视图中用Tab快速切换字段比鼠标点击更高效输错后按Esc可放弃当前字段修改。6.3 导入导出一致性验证三表比对法导出“学生成绩单”为 CSV 后再导入为新表必须验证数据零误差。方法在原始查询中执行SELECT COUNT(*) FROM [学生成绩单]记下总数 N在新导入的“学生成绩单”表中执行同样COUNT(*)必须等于 N抽样比对对学号20200001的记录用SELECT * FROM [学生成绩单] WHERE 学号20200001和SELECT * FROM [学生成绩单_导入] WHERE 学号20200001对比每列值尤其注意成绩是否为数字、课程名是否有乱码。这是我从那以后每次做数据迁移都强制走一遍的流程不验证不交付。哪怕只是课堂实验也要养成生产环境的肌肉记忆。6.4 性能基线快照记录首次查询耗时作为未来参照用SELECT * FROM 成绩这类全表扫描查询记录首次执行时间Access 状态栏显示“已完成X 秒”。随着数据量增长如导入 10 万条成绩再执行同样查询若耗时翻倍说明需要建索引。立即行动在“成绩”表设计视图中为学号和课程号字段分别建索引右键 → “索引” → “有有重复”再测速。你会发现SELECT * FROM 成绩 WHERE 学号20200001从秒级降到毫秒级。6.5 备份策略具象化版本号 时间戳的不可逆存档不要只说“记得备份”要定义动作每次重大操作如建完所有表、导入首批数据、写完所有查询后将.MDB文件复制为教学管理_v1_20231025.mdb文件名中v1是版本号20231025是日期确保可追溯存放在与原文件不同的物理位置如 U 盘、另一硬盘分区防止单点故障。希望帮到你。本文还有配套的精品资源点击获取