news 2026/10/12 1:07:35

社会养老保险数据库课程设计:Access与SQL Server建表、调试与4NF论证

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
社会养老保险数据库课程设计:Access与SQL Server建表、调试与4NF论证

简介:这份文档资料面向高校信息管理、计算机相关专业学生,围绕“信息系统数据库技术(一)”课程设计任务,提供一套以社会养老保险为业务场景的完整数据库设计范例。内容覆盖从提出问题、E-R模型设计、关系模式转换到Access 2003环境下的建库建表、约束实现与调试运行的全过程,并附有课程设计文档结构、提交规范与成绩评定说明,适合作为课程设计选题参考或答辩文档模板。资源包共1个doc文件,约1.71MB,内含需求分析、数据模型、表结构定义及实施安排等章节,可直接对照修改为个人作业。目前已有202人学习下载,能帮助读者快速理清数据库课程设计的写作框架与实现思路,减少从零搭建文档和表结构的时间成本。

1. 从一份“保险-数据库课程设计”文档说起:它到底能帮你省下多少事

如果你正在搜“数据库课程设计”“Access 课程设计”“社会养老保险数据库”,大概率你手里已经有一份任务书,deadline 也快到了。这份“保险-数据库课程设计---副本.doc”就是一份完整的课程设计参考文档,核心内容是社会养老保险数据库系统的设计与实现,基于 Access 2003 环境,覆盖参保、缴费、发放、终保、退保、转出、给付开户等业务模块。它不是那种只给题目的空壳文档,而是把 E-R 模型、关系模式、14 张数据表的字段定义、主外键约束、索引设置都写进去了。适合谁?信管、计科专业正在做数据库课程设计的学生,或者需要一份“能照着建库”的参考模板的从业者。你拿到它,至少不用从零去想“养老保险业务到底有哪些实体、哪些联系”。

2. 把 E-R 模型读透:从业务单据到 14 张表的映射逻辑

2.1 先搞清楚业务实体和它们之间的关系

这份文档最值钱的地方不是那 14 张表的字段列表,而是它把“业务单据 → E-R 模型 → 关系模式”这条链路走通了。你如果直接跳到建表那一步,后面遇到“为什么人员档案信息里既有乡镇名称又有机构名称”这种问题就会卡住。

文档里的业务场景是农村社会养老保险处理,用户对象是农村乡镇参保人员。核心业务动作有七个:缴费、开户、终保、退保、转出、发放、人员变更。每个业务动作对应一到多张表,而所有业务都挂在“人员档案信息”这个主实体上。

先看缴费这条线。文档里给了三张表:临时缴费明细、缴费账户、缴费批次。为什么缴费要拆成三张?因为缴费不是一次性的动作,它涉及“批次”这个批量概念。一个缴费批次下有多条临时缴费明细,每条明细对应一个参保人员的缴费金额。缴费账户则是按个人维度汇总的缴费总金额。这种拆分在数据库设计里叫“消除部分函数依赖”,是往 4NF 走的关键一步。

再看转出信息。转出涉及新集体、新乡镇、新机构三个外键,同时关联人员档案信息。这里有个容易翻车的地方:转出信息表里的“新集体编号”“新乡镇编号”“新机构编号”是外键,但它们指向的是集体信息、乡镇信息、机构信息这三张基础表,而不是人员档案信息。文档里写的是“新集体名称”“新乡镇名称”“新机构名称”作为外键字段,但实际建表时应该用编号做外键,名称字段只做展示用。这一点在后面建表时要特别注意。

2.2 整体 E-R 模型的连接关系怎么读

文档里给了一张整体 E-R 模型,把所有实体和联系画在一起。你如果只看文字描述,可能会觉得乱。我一般会按“主实体 → 业务实体 → 基础实体”三层来拆。

主实体只有一个:人员档案信息。它的主键是个人编号,属性包括姓名、身份证号、性别、民族,以及三个外键:集体编号、乡镇编号、机构编号。注意,文档里人员档案信息表的字段写的是“乡镇名称”“机构名称”“所属集体名称”作为外键,但按规范应该存编号。这是文档的一个小瑕疵,建表时建议改成编号字段。

业务实体有七个:临时缴费明细、缴费账户、缴费批次、给付开户信息、终保信息、退保信息、转出信息、发放标准信息、发放信息、人员变更记录。实际上算下来是十个业务实体,但文档把它们归在七个业务模块下。每个业务实体的主键要么是“单据流水号”,要么是“个人编号+日期”的组合键。

基础实体有三个:集体信息、乡镇信息、机构信息。它们的主键分别是集体编号、乡镇编号、机构编号,属性只有名称。这三张表是典型的“码表”,用来给人员档案信息提供分类维度。

连接关系上,人员档案信息与每个业务实体都是一对多的关系。一个参保人员可以有多条缴费明细、多条发放记录、多条变更记录。而人员档案信息与集体信息、乡镇信息、机构信息是多对一的关系,多个参保人员可以属于同一个集体、同一个乡镇、同一个机构。

提示:读 E-R 模型时,先确认每个实体的主键,再看外键指向哪里。如果外键指向的是基础表的编号字段,那关系就是清晰的;如果指向的是名称字段,后面查询时会出现性能问题。

2.3 从 E-R 模型到关系模式的转换检查

文档里已经给出了关系模式,每个表都标了 PK 和 FK。你拿到之后不要直接抄,先做一遍转换检查。转换规则很简单:每个实体转一张表,一对多关系把“一”方的主键放到“多”方做外键,多对多关系单独建一张关联表。

这份文档里没有多对多关系,所以转换比较直接。但有一个地方需要确认:发放标准信息表的主键是“个人编号+起始年月”,发放信息表的主键是“个人编号+发放年月”。这两个表的主键都是组合键,而且都包含个人编号。这意味着一个参保人员可以有多条发放标准记录和多条发放记录。发放标准信息里的“起始年月”和“截止年月”定义了发放的有效期,发放信息里的“发放年月”是实际发放的月份。这两个表通过个人编号关联,但业务上还需要保证发放年月落在起始年月和截止年月之间。这个约束在 Access 里可以通过有效性规则实现,但文档里没有写,后面建表时我会补上。

3. 在 Access 里把 14 张表建出来:字段类型、主键、外键和约束的落地操作

3.1 建表顺序和基础表先行原则

Access 里建表有一个硬性顺序:先建基础表,再建主表,最后建业务表。因为外键约束要求被引用的表必须已经存在。这份文档里的建表顺序应该是:乡镇信息 → 机构信息 → 集体信息 → 人员档案信息 → 缴费批次 → 临时缴费明细 → 缴费账户 → 给付开户信息 → 终保信息 → 退保信息 → 转出信息 → 发放标准信息 → 发放信息 → 人员变更记录。

先建乡镇信息、机构信息、集体信息这三张码表。它们的结构最简单,字段少,主键明确。建完之后录入测试数据,比如乡镇信息里录入“城关镇”“李集镇”“王庄乡”,机构信息里录入“县社保局”“镇社保所”,集体信息里录入“城关村集体”“李集村集体”。

然后建人员档案信息表。这张表是核心,字段最多,外键最多。建表时注意:个人编号是文本类型,长度 50,主键,必填;姓名、身份证号、性别、民族都是文本类型,必填;集体编号、乡镇编号、机构编号是外键,类型要和被引用表的主键一致,都是文本 50。

-- 在 Access 中可以通过 SQL 视图执行,也可以在设计视图里手动设置 CREATE TABLE 人员档案信息 ( 个人编号 TEXT(50) NOT NULL PRIMARY KEY, 姓名 TEXT(50) NOT NULL, 身份证号 TEXT(50) NOT NULL, 性别 TEXT(50) NOT NULL, 民族 TEXT(50) NOT NULL, 集体编号 TEXT(50), 乡镇编号 TEXT(50), 机构编号 TEXT(50), FOREIGN KEY (集体编号) REFERENCES 集体信息(集体编号), FOREIGN KEY (乡镇编号) REFERENCES 乡镇信息(乡镇编号), FOREIGN KEY (机构编号) REFERENCES 机构信息(机构编号) );

这段 SQL 在 Access 里不能直接全部执行,因为 Access 的 SQL 视图对 CREATE TABLE 支持有限,外键约束需要在设计视图里手动建立关系。我一般会先在设计视图里把字段和主键建好,然后到“数据库工具 → 关系”里拖拽建立表间关系。Access 的关系视图里可以设置参照完整性,勾选“级联更新相关字段”和“级联删除相关记录”要慎重,因为人员档案信息被删除时,下面的缴费记录、发放记录都会跟着删,测试阶段可以开,正式数据不要开。

3.2 业务表的字段类型和默认值设置

业务表里最容易出错的是货币类型和日期类型的设置。文档里明确写了“发放金额”“缴费金额”“返还金额”“补贴额”都是货币类型,默认值 0。Access 里货币类型对应的是“货币”数据类型,小数位数自动设为 2,不需要额外设置。

日期类型统一用“日期/时间”,格式设为“短日期”即可。文档里“起始时间”“截止时间”“缴费日期”“开户日期”“终保日期”“退保日期”“转出日期”“发放年月”都是日期/时间类型。

-- 发放标准信息表建表语句(Access 设计视图等效操作) CREATE TABLE 发放标准信息 ( 个人编号 TEXT(50) NOT NULL, 起始年月 DATETIME NOT NULL, 截止年月 DATETIME, 发放金额 CURRENCY DEFAULT 0, PRIMARY KEY (个人编号, 起始年月), FOREIGN KEY (个人编号) REFERENCES 人员档案信息(个人编号) );

这里的主键是组合键,Access 设计视图里选中两行然后点主键按钮即可。注意“起始年月”和“截止年月”虽然名字里有“年月”,但类型是日期/时间,录入时可以用“2024-01”这种格式,Access 会自动补全为“2024-01-01”。

发放信息表的建表逻辑类似,主键是“个人编号+发放年月”,外键指向人员档案信息。这里有一个业务约束:发放年月必须落在发放标准信息的起始年月和截止年月之间。在 Access 里可以通过“有效性规则”实现,但跨表约束 Access 不支持,只能在窗体层面做校验。如果是在 SQL Server 里,可以用触发器实现。

3.3 索引设置和参照完整性的实操细节

文档里对每个表的索引都做了标注,大部分是“有(有重复)”和“有(无重复)”。Access 里主键自动创建无重复索引,外键字段建议手动创建有重复索引,因为查询时经常按外键过滤。

具体操作:打开表的设计视图,选中字段,在“常规”选项卡里找到“索引”属性,下拉选择“有(有重复)”或“有(无重复)”。主键字段自动是“有(无重复)”,不需要改。外键字段比如人员档案信息里的“乡镇编号”,设为“有(有重复)”,因为多个人员可能属于同一个乡镇。

参照完整性在“数据库工具 → 关系”里设置。把人员档案信息拖进来,再把缴费账户拖进来,拖拽“个人编号”字段建立关系。弹出编辑关系窗口,勾选“实施参照完整性”,然后选择“级联更新相关字段”和“级联删除相关记录”。这里有个血泪经验:级联删除在测试阶段很方便,但如果你误删了一条人员档案,下面所有缴费记录、发放记录、变更记录全部消失,而且 Access 不会给你后悔药。我一般只在测试库里开级联删除,正式库只开级联更新。

注意:Access 2003 的关系视图最多支持显示 12 张表,14 张表需要分两屏看。建关系时先把核心的几张表拖进去,建完关系再拖其他的。

4. 调试运行阶段:测试数据怎么造、查询怎么验、常见报错怎么排

4.1 测试数据的构造策略

文档里要求“输入测试数据进行调试分析”,但没给具体数据。我一般会按“基础表 → 主表 → 业务表”的顺序造数据。基础表每张造 3 到 5 条,人员档案信息造 10 条左右,业务表每张造 20 到 30 条。这样既能覆盖一对一、一对多的场景,又不会因为数据太多导致调试困难。

人员档案信息的测试数据要注意:身份证号要唯一,性别和民族要有多样性,乡镇编号、机构编号、集体编号要覆盖所有基础表里的记录。比如乡镇信息里有“城关镇”“李集镇”“王庄乡”,人员档案里就要有人属于城关镇,有人属于李集镇,有人属于王庄乡。

缴费账户和临时缴费明细的数据要有关联。先造缴费批次,比如“2024 年第一批”“2024 年第二批”,每批有缴费总额和缴费人数。然后造临时缴费明细,每条明细关联一个缴费批次和一个个人编号。最后造缴费账户,按个人编号汇总缴费总金额。

-- 插入测试数据的示例(Access SQL 视图) INSERT INTO 乡镇信息 (乡镇编号, 乡镇名称) VALUES ('XZ001', '城关镇'); INSERT INTO 乡镇信息 (乡镇编号, 乡镇名称) VALUES ('XZ002', '李集镇'); INSERT INTO 乡镇信息 (乡镇编号, 乡镇名称) VALUES ('XZ003', '王庄乡'); INSERT INTO 人员档案信息 (个人编号, 姓名, 身份证号, 性别, 民族, 乡镇编号, 机构编号, 集体编号) VALUES ('GR001', '张三', '410123199001011234', '男', '汉族', 'XZ001', 'JG001', 'JT001'); INSERT INTO 人员档案信息 (个人编号, 姓名, 身份证号, 性别, 民族, 乡镇编号, 机构编号, 集体编号) VALUES ('GR002', '李四', '410123199202022345', '女', '汉族', 'XZ002', 'JG002', 'JT002');

插入数据时注意日期格式。Access 默认的日期格式是“yyyy-mm-dd”,如果你输入“2024/01/01”可能会报错。货币字段直接输数字,不要加“元”字。

4.2 查询验证:从单表查询到多表连接

调试运行的核心是验证数据约束和查询功能。文档里要求“实现各种业务状态的查询”,我一般会设计以下几类查询来验证:

第一类,单表查询。比如查询所有参保人员信息,验证人员档案信息表的数据是否完整。查询所有缴费批次,验证缴费批次表的主键是否唯一。

第二类,多表连接查询。比如查询某个参保人员的所有缴费记录,需要连接人员档案信息、缴费账户、临时缴费明细三张表。再比如查询某个乡镇的所有参保人员,需要连接人员档案信息和乡镇信息。

-- 查询城关镇所有参保人员的缴费总金额 SELECT 人员档案信息.姓名, 缴费账户.个人缴费总金额 FROM 人员档案信息 INNER JOIN 缴费账户 ON 人员档案信息.个人编号 = 缴费账户.个人编号 INNER JOIN 乡镇信息 ON 人员档案信息.乡镇编号 = 乡镇信息.乡镇编号 WHERE 乡镇信息.乡镇名称 = '城关镇';

这个查询验证了三个东西:人员档案信息和缴费账户的关联是否正确,人员档案信息和乡镇信息的关联是否正确,乡镇名称过滤是否生效。如果查不出结果,先检查人员档案信息里的乡镇编号是否和乡镇信息里的乡镇编号匹配。

第三类,聚合查询。比如统计每个缴费批次的缴费总金额和缴费人数,验证缴费批次表的汇总数据是否和临时缴费明细的明细数据一致。

-- 统计每个缴费批次的缴费总金额和缴费人数 SELECT 缴费批次编号, SUM(缴费金额) AS 实际缴费总额, COUNT(DISTINCT 个人编号) AS 实际缴费人数 FROM 临时缴费明细 GROUP BY 缴费批次编号;

这个查询的结果要和缴费批次表里的“缴费总额”和“缴费人数”对比。如果不一致,说明临时缴费明细的数据有问题,或者缴费批次表的汇总数据没有及时更新。

4.3 常见报错和排查方法

Access 里建库时最常见的报错有这么几个:

第一个,“不能在多字段索引中包含重复字段”。这个报错通常出现在设置组合主键时,你把同一个字段选了两次。解决方法是检查主键设置,确保每个字段只出现一次。

第二个,“关系必须具有唯一索引”。这个报错出现在建立表间关系时,被引用的字段不是主键或者没有唯一索引。解决方法是先给被引用字段建唯一索引,或者直接把它设为主键。

第三个,“输入值必须符合有效性规则”。这个报错出现在录入数据时,输入的值不符合字段的有效性规则。比如货币字段输入了文字,日期字段输入了非法日期。解决方法是检查输入格式,货币字段只输数字,日期字段用“yyyy-mm-dd”格式。

第四个,“由于表‘xxx’正在被其他用户或进程使用,不能删除或修改”。这个报错出现在修改表结构时,表被其他窗体或查询占用了。解决方法是关闭所有打开的窗体和查询,再重新打开表的设计视图。

提示:Access 2003 的调试信息不如 SQL Server 详细,报错时先看错误号,再查 Access 帮助文档。如果帮助文档看不懂,把错误号复制到搜索引擎里搜,一般都能找到解决方案。

5. 从 Access 迁移到 SQL Server:建表脚本、约束差异和验证技巧

5.1 为什么建议在 SQL Server 里再跑一遍

Access 适合快速建库和单机调试,但它的 SQL 方言和约束机制跟标准 SQL 有差异。如果你后面要把这个课程设计往 SQL Server 上迁移,或者老师要求用 SQL Server 实现,那在 Access 里建完表之后,最好在 SQL Server 里再跑一遍建表脚本。这样能验证你的设计是否符合标准 SQL 规范,也能提前发现 Access 里隐藏的问题。

SQL Server 的建表语法和 Access 有区别。Access 的 TEXT 类型对应 SQL Server 的 VARCHAR 或 NVARCHAR,货币类型对应 MONEY 或 DECIMAL,日期/时间对应 DATETIME 或 DATE。主键和外键的语法基本一致,但 SQL Server 支持更丰富的约束,比如 CHECK 约束、DEFAULT 约束、UNIQUE 约束。

-- SQL Server 建表脚本示例 CREATE TABLE 人员档案信息 ( 个人编号 VARCHAR(50) NOT NULL PRIMARY KEY, 姓名 NVARCHAR(50) NOT NULL, 身份证号 VARCHAR(50) NOT NULL UNIQUE, 性别 NVARCHAR(10) NOT NULL, 民族 NVARCHAR(20) NOT NULL, 集体编号 VARCHAR(50), 乡镇编号 VARCHAR(50), 机构编号 VARCHAR(50), CONSTRAINT FK_人员_集体 FOREIGN KEY (集体编号) REFERENCES 集体信息(集体编号), CONSTRAINT FK_人员_乡镇 FOREIGN KEY (乡镇编号) REFERENCES 乡镇信息(乡镇编号), CONSTRAINT FK_人员_机构 FOREIGN KEY (机构编号) REFERENCES 机构信息(机构编号) );

注意 SQL Server 里身份证号加了 UNIQUE 约束,因为身份证号在业务上必须唯一。Access 里虽然文档写了“有(无重复)”,但实际建表时容易漏掉。SQL Server 里用 CONSTRAINT 给外键命名,方便后面排查错误。

5.2 约束差异和迁移时的注意事项

Access 和 SQL Server 在约束上的主要差异有三个:

第一,Access 不支持 CHECK 约束的完整语法。比如你想限制“性别”字段只能是“男”或“女”,Access 里只能在有效性规则里写“"男" Or "女"”,SQL Server 里可以用 CHECK (性别 IN ('男', '女'))。

第二,Access 的级联删除和级联更新是在关系视图里设置的,SQL Server 里是在外键定义时用 ON DELETE CASCADE 和 ON UPDATE CASCADE 指定的。

第三,Access 的日期类型精度只到秒,SQL Server 的 DATETIME 精度到毫秒。迁移时如果日期字段有毫秒级数据,可能会丢失精度。

-- SQL Server 里添加 CHECK 约束 ALTER TABLE 人员档案信息 ADD CONSTRAINT CK_性别 CHECK (性别 IN ('男', '女')); ALTER TABLE 发放标准信息 ADD CONSTRAINT CK_发放金额 CHECK (发放金额 >= 0);

迁移时还有一个坑:Access 里的中文表名和字段名在 SQL Server 里需要加方括号或者双引号,否则会报语法错误。我一般建议在 SQL Server 里用英文表名和字段名,或者统一加方括号。

5.3 验证迁移结果的方法

迁移完成后,怎么验证 SQL Server 里的库和 Access 里的库是一致的?我一般会做三件事:

第一,对比表数量。Access 里 14 张表,SQL Server 里也应该是 14 张表。用SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'查一下。

第二,对比字段数量和类型。用SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '人员档案信息'查一下,和 Access 里的设计视图对比。

第三,跑一遍相同的查询。把 Access 里的多表连接查询复制到 SQL Server 里,看结果是否一致。如果结果不一致,检查连接条件和过滤条件是否相同。

-- 验证表数量和字段数量 SELECT TABLE_NAME, COUNT(*) AS 字段数 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'dbo' GROUP BY TABLE_NAME ORDER BY TABLE_NAME;

这个查询会列出所有表的字段数,你可以和 Access 里的表结构对比。如果某个表的字段数不对,说明迁移时漏了字段或者多了字段。

注意:SQL Server 里的默认架构是 dbo,Access 里没有架构概念。迁移时如果表名有重复,SQL Server 会自动加后缀,比如“人员档案信息1”,需要手动改回来。

6. 把课程设计文档写出高分:E-R 图绘制、4NF 论证和调试说明的写法

6.1 E-R 图的绘制工具和规范

文档里要求画 E-R 图,但没指定工具。我一般用 Visio 或者 draw.io。Visio 的数据库建模功能比较强,支持正向工程和逆向工程,但需要安装。draw.io 免费,在线可用,画 E-R 图够用了。

画 E-R 图时注意几个规范:实体用矩形,属性用椭圆,联系用菱形,主键属性加下划线。实体之间的联系要标上 1:1、1:N、M:N。这份文档里的联系都是 1:N,人员档案信息是“1”方,业务表是“N”方。

整体 E-R 图如果实体太多,可以拆成多个局部 E-R 图,再合并成整体 E-R 图。文档里已经拆了七个局部 E-R 图,你可以在每个局部图下面写一段分析说明,解释这个业务模块的实体、属性和联系是怎么来的。

6.2 4NF 论证的写法

文档里明确要求“规范表设计至 4NF(如有特殊情况未达到 4NF 需说明理由)”。4NF 的定义是:在满足 BCNF 的基础上,消除非平凡的多值依赖。简单说,就是一张表里不能有两个独立的多值属性。

这份文档里的表大部分都满足 4NF。比如人员档案信息表,个人编号是主键,其他属性都函数依赖于个人编号,没有多值依赖。缴费账户表,缴费流水号是主键,个人缴费总金额、缴费日期、缴费批次编号、个人编号都函数依赖于缴费流水号,也没有多值依赖。

但有一个地方需要注意:发放标准信息表的主键是“个人编号+起始年月”,属性有截止年月和发放金额。这里“截止年月”函数依赖于“个人编号+起始年月”,不存在多值依赖。发放信息表的主键是“个人编号+发放年月”,属性只有发放金额,也不存在多值依赖。

论证 4NF 时,先说明每张表的主键是什么,然后说明非主属性如何函数依赖于主键,最后说明不存在多值依赖。如果某张表确实不满足 4NF,比如你把“缴费明细”和“发放明细”放在同一张表里,那就需要拆表。

6.3 调试运行说明的写法

调试运行说明是课程设计文档里最容易写空的部分。很多人只写“输入测试数据,运行正常”,这样拿不到高分。我一般会按“测试目的 → 测试数据 → 测试步骤 → 测试结果 → 问题分析”这个结构来写。

测试目的要具体,比如“验证人员档案信息与缴费账户的一对多关系是否正确”。测试数据要列出具体的记录,比如“人员档案信息表插入 10 条记录,缴费账户表插入 25 条记录”。测试步骤要写清楚操作顺序,比如“先打开人员档案信息表,再打开缴费账户表,通过个人编号建立关联”。测试结果要给出截图或者查询结果,比如“查询张三的缴费记录,返回 3 条记录,缴费总金额 1500 元”。问题分析要写你遇到了什么错误,怎么解决的,比如“插入缴费记录时报错‘输入值必须符合有效性规则’,原因是缴费金额输入了负数,改为正数后正常”。

最后,文档的格式也很重要。封面要写清楚题目、学号、姓名、班级、指导教师。目录要自动生成,页码要对应。成绩评定表要放在最后,留出评阅老师签章的位置。提交的时候注意文件命名规则:学号+姓名,比如“080310618唐永.doc”。数据库文件也要按这个规则命名,和文档一起打包提交。

提示:打印稿和电子档都要交,电子档刻光盘的时候注意把文档和数据库文件放在同一个文件夹里,文件夹名也用学号+姓名。光盘要贴标签,写清楚班级和学号。

6.4 一个具体的技巧:用查询验证 4NF 的拆分是否合理

如果你不确定某张表是否满足 4NF,可以写一个查询来验证。比如你想验证“缴费账户”和“临时缴费明细”的拆分是否合理,可以写一个查询,把两张表连接起来,看是否存在冗余数据。

-- 验证缴费账户和临时缴费明细的数据一致性 SELECT 缴费账户.个人编号, 缴费账户.个人缴费总金额, SUM(临时缴费明细.缴费金额) AS 明细汇总金额 FROM 缴费账户 INNER JOIN 临时缴费明细 ON 缴费账户.缴费流水号 = 临时缴费明细.缴费流水号 GROUP BY 缴费账户.个人编号, 缴费账户.个人缴费总金额 HAVING 缴费账户.个人缴费总金额 <> SUM(临时缴费明细.缴费金额);

这个查询会返回所有“缴费账户里的总金额”和“临时缴费明细里的汇总金额”不一致的记录。如果返回空,说明拆分是合理的,数据是一致的。如果返回了记录,说明要么是数据录入错误,要么是拆分逻辑有问题,需要回头检查 E-R 模型。

从那以后我每次做数据库课程设计,都会在提交前跑一遍这个一致性查询,确认所有汇总表和明细表的数据对得上。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 1:07:23

SQL Server 2000停车场系统:数据库课程设计的范式建模范本

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 1:06:40

AI芯片选型全解析:从57种到120+种,三步筛出合适设备

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 1:05:27

高教杯机械类计算机绘图试卷解析:评分标准与CAD实操技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/12 1:04:44

基于YOLOv5+ResNet18的骨龄识别系统:从检测到PyQt5部署

简介&#xff1a;一套面向骨龄识别检测的完整工程源码&#xff0c;适合毕业设计、医学图像分析入门以及目标检测与分类联合学习的开发者。系统基于PyQt5构建交互界面&#xff0c;目标定位部分采用YOLOv5网络&#xff0c;年龄段判别借助ResNet18残差分类网络&#xff0c;整体流程…

作者头像 李华
网站建设 2026/10/12 1:04:30

图书管理系统数据库设计实战:从ER建模到事务一致性保障

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华