Microsoft Access 数据库设计完整教程
第一部分:核心理念与准备工作
在开始点击任何按钮之前,理解一些基本概念至关重要,这能帮助你避免未来最常见、最头疼的错误。

为什么需要好的数据库设计?
一个好的数据库设计能带来:
- 数据一致性:避免同一信息在不同地方存储不一致(同一个客户的名字有“张三”和“张叁”两种写法)。
- 数据完整性:确保数据是准确和有效的(“年龄”字段不能是文本,“性别”只能是“男”或“女”)。
- 减少数据冗余:避免重复存储相同的数据,节省存储空间。
- 提高查询效率:当你需要查找或汇总数据时,结构清晰的数据库能让你更快地得到结果。
- 易于维护和扩展:当业务需求变化时,一个设计良好的数据库更容易修改和增加新功能。
核心概念解析
- 数据库:一个存储数据的容器,在 Access 中就是一个
.accdb文件。 - 表:数据库的核心,用于存储特定类型的数据。“客户表”、“产品表”、“订单表”,每个表都应该有一个唯一的主键。
- 记录:表中的一行数据,代表一个完整的实体,客户表中的一条记录代表一个客户。
- 字段:表中的一列,用于描述实体的某个属性,客户表中的“姓名”、“电话”、“地址”等字段。
- 主键:表中的一个或多个字段,其值能唯一标识表中的每一条记录,主键不能为空,且必须唯一。“客户ID”可以作为客户表的主键。
- 外键:在一张表中,用来引用另一张表主键的字段,它是建立表与表之间关系的桥梁,在“订单表”中有一个“客户ID”字段,它就是外键,用来关联“客户表”。
数据库设计的基本步骤
一个专业的数据库设计流程通常包括以下六个步骤:
- 需求分析:与用户沟通,明确数据库需要存储哪些数据,需要实现哪些功能。
- 确定实体:识别出需要管理的主要对象或事物,客户、产品、订单、员工等。
- 确定属性:为每个实体确定需要描述的具体信息(即字段),客户实体有:姓名、电话、邮箱等。
- 定义主键:为每个实体(表)选择一个能唯一标识其记录的字段作为主键。
- 确定关系:分析实体之间的关系(一对一、一对多、多对多),并通过主键和外键来实现。
- 规范化:应用数据库规范化理论,消除数据冗余和异常,优化表结构。
第二部分:实战演练 - 设计一个“学生信息管理系统”
我们将通过一个简单的例子,一步步完成数据库设计。
步骤 1:需求分析
假设我们要为一个学校设计一个简单的学生信息管理系统,需要存储以下信息:

- 学生信息:学号、姓名、性别、出生日期、班级。
- 课程信息:课程ID、课程名称、学分。
- 成绩信息:每个学生每门课程的成绩。
步骤 2 & 3:确定实体和属性
根据需求,我们可以确定三个核心实体(表):
- 学生表
- 学号
- 姓名
- 性别
- 出生日期
- 班级
- 课程表
- 课程ID
- 课程名称
- 学分
- 成绩表
- (这里需要记录是哪个学生的哪门课的成绩)
- 学号 (来自学生表)
- 课程ID (来自课程表)
- 分数
注意:为什么成绩不直接作为学生表的一个字段(如“数学成绩”、“语文成绩”)?因为这样设计是错误的,如果一个学生有5门课,你就要为每门课都建一个字段,这会导致数据结构僵化,无法灵活增减课程,正确的做法是单独建一个“成绩表”,通过关联来记录。
步骤 4:定义主键
- 学生表:
学号是唯一的,适合作为主键。 - 课程表:
课程ID是唯一的,适合作为主键。 - 成绩表:
学号+课程ID的组合才能唯一确定一条成绩记录(一个学生的一门课只有一个成绩),所以这是一个复合主键。
步骤 5:确定关系
- 学生表 和 成绩表:一个学生可以有多门课程的成绩,但一条成绩记录只对应一个学生,这是 “一对多” 关系。
学生表的“学号”是主键,成绩表的“学号”是外键。 - 课程表 和 成绩表:一门课程可以被多个学生选修,但一条成绩记录只对应一门课程,这也是 “一对多” 关系。
课程表的“课程ID”是主键,成绩表的“课程ID”是外键。
步骤 6:规范化
我们目前的设计已经满足了第一范式(1NF)和第二范式(2NF),基本消除了数据冗余,学生的姓名和班级信息只在学生表中存储一次,而不是在每个成绩记录里都重复一遍。
第三部分:在 Access 中实现设计
我们将把设计好的蓝图在 Access 中变为现实。

创建新数据库
- 打开 Microsoft Access。
- 选择“空白数据库”。
- 在右侧的“文件名”框中,为你的数据库命名,
学生管理系统.accdb。 - 选择保存位置,然后点击“创建”。
创建表
Access 提供了多种创建表的方式,我们推荐使用“设计视图”,因为它能让你最精确地控制每个字段的属性。
创建“学生表”
- 在顶部功能区,点击“创建”选项卡。
- 在“表格”组中,点击“表设计”。
- 现在你会看到一个网格,这里是定义表结构的地方。
| 字段名称 | 数据类型 | 说明 |
|---|---|---|
| 学号 | 短文本 | 主键 |
| 姓名 | 短文本 | |
| 性别 | 短文本 | |
| 出生日期 | 日期/时间 | |
| 班级 | 短文本 |
设置主键:
- 选中“学号”这一行。
- 在顶部“表格设计”选项卡中,点击“主键”按钮(一个钥匙图标),学号”字段的左边会出现一个小钥匙图标。
保存表:
- 点击左上角的“保存”按钮,或按
Ctrl + S。 - 输入表名“学生表”,然后点击“确定”。
用同样的方法创建“课程表”和“成绩表”
- 课程表:
- 字段:
课程ID(短文本, 主键),课程名称(短文本),学分(数字)
- 字段:
- 成绩表:
- 字段:
学号(短文本),课程ID(短文本),分数(数字) - 设置复合主键:按住
Ctrl键,同时选中“学号”和“课程ID”两行,然后点击“主键”按钮。
- 字段:
建立表关系
这是连接所有表的关键步骤。
- 在顶部功能区,点击“数据库工具”选项卡。
- 在“关系”组中,点击“关系”。
- 第一次打开时,会弹出一个“显示表”对话框,如果没弹出,可以在“关系”工具栏中点击“显示表”。
- 分别将“学生表”、“课程表”、“成绩表”添加到关系图中,然后关闭“显示表”对话框。
- 建立关系:
- 从“学生表”中选中“学号”字段,按住鼠标左键,拖动到“成绩表”的“学号”字段上,然后松开鼠标。
- 此时会弹出“编辑关系”对话框,确保勾选了“实施参照完整性”,这个选项非常重要,它能防止出现“孤儿记录”(删除一个学生后,他相关的成绩记录还在)。
- 点击“创建”。
- 你会看到两个表之间出现了一条连接线,线上标有“1”和“∞”,代表“一对多”关系。
- 用同样的方法,从“课程表”的“课程ID”拖动到“成绩表”的“课程ID”上,并勾选“实施参照完整性”。
你的数据库结构已经搭建完成!
优化数据输入 - 创建输入表单
直接在表格中输入数据既不美观也容易出错,创建表单是更好的方式。
- 在左侧的“导航窗格”中,选中“学生表”。
- 点击“创建”选项卡。
- 在“窗体”组中,点击“窗体”,Access 会自动为你创建一个简单的数据输入窗体。
- 你可以切换到“布局视图”或“设计视图”,对窗体进行美化,比如调整字段位置、添加标签等。
- 保存窗体,命名为“输入学生信息”。
用同样的方法可以为“课程表”创建“输入课程信息”窗体。
查询和展示数据 - 创建查询
查询是数据库的灵魂,它让你能从多个表中提取有用的信息。
创建一个“学生成绩查询”
- 点击“创建”选项卡。
- 在“查询”组中,点击“查询设计”。
- 在“显示表”对话框中,添加“学生表”、“成绩表”和“课程表”。
- 构建查询:
- 从“学生表”中,双击“学号”、“姓名”。
- 从“课程表”中,双击“课程名称”。
- 从“成绩表”中,双击“分数”。
- Access 会自动通过外键连接这些表。
- 点击“运行”按钮(感叹号图标),你就能看到每个学生的课程和成绩了。
- 保存查询,命名为“学生成绩查询”。
数据汇总 - 创建报表
报表用于将查询结果以更正式、更美观的格式打印或导出。
- 在左侧导航窗格中,选中你刚才创建的“学生成绩查询”。
- 点击“创建”选项卡。
- 在“报表”组中,点击“报表”,Access 会自动生成一个基于该查询的报表。
- 你可以在“布局视图”或“设计视图”中进行修改和美化。
- 保存报表。
第四部分:进阶与最佳实践
数据类型的选择
- 短文本:用于文本、代码等,如姓名、学号、班级,长度可设为固定值(如学号设为10)。
- 长文本:用于大段文字,如备注、地址。
- 数字:用于计算,如年龄、分数、价格,注意“数字”类型下还有多种子类型(字节、整型、长整型等),根据数值范围选择合适的子类型可以节省空间。
- 日期/时间:用于日期和时间,可以进行日期计算。
- 是/否:用于逻辑判断,如“是否毕业”、“是否会员”。
- 自动编号:非常适合作为主键,它会为每条新记录自动生成一个唯一的、递增的数字。强烈推荐在新建表时使用此类型作为主键,因为它简单、高效且绝对唯一。
- 附件:用于存储文件,如照片、文档。
- 查阅向导:非常实用的类型!它能让你在一个字段中从另一个表或值列表中选择数据,在“学生表”的“性别”字段中使用查阅向导,可以直接从“男”、“女”中选择,而不是手动输入,同样,在“成绩表”的“学号”字段中使用查阅向导,可以直接从“学生表”中选择学生。
常见错误与避免
- 平面化数据库:所有信息都堆在一张大表里,把学生信息和成绩都放在一张表里。错误! 必须拆分成多个相关联的表。
- 使用有意义的文本作为主键:例如用“姓名”作为主键,但重名是常见的,这会导致主键冲突。最佳实践是使用“自动编号”或“短文本”型的ID作为主键。
- 允许空值:除非必要,否则主键和关键字段应设置为“必填字段”,以保证数据完整性。
- 忽略关系和参照完整性:这会导致数据混乱,出现无法解释的“孤儿记录”。
通过本教程,你已经掌握了从零开始设计一个 Access 数据库的完整流程:
- 规划先行:分析需求,设计表结构和关系。
- 精确实现:使用设计视图创建表,定义字段、主键。
- 建立桥梁:在关系图中建立表关系,并实施参照完整性。
- 优化交互:创建表单方便数据输入,创建查询提取数据,创建报表展示结果。
- 持续优化:学习并应用数据类型、规范化等最佳实践。
一个好的数据库是设计和构建出来的,而不是随便堆砌出来的,花在设计阶段的时间,会在未来的使用和维护中为你节省大量的精力,祝你学习愉快!
