ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

保险数据库课程设计:E-R建模、表设计与Access实现避坑

保险数据库课程设计:E-R建模、表设计与Access实现避坑 简介这是一份“信息系统数据库技术一”课程设计完整参考文档以社会养老保险数据库为例面向信管类专业学生或需要完成数据库课程设计的学习者。内容从课程设计要求、基本步骤到具体实现均有覆盖系统展示了基于Access 2003环境下的数据库设计全过程包括用户业务现状分析、E-R模型构建、关系数据表设计如人员档案、缴费、发放、退保、转出等模块、表间约束设置与调试运行说明适合参考其文档结构与数据建模思路。资源为单个doc文档压缩包大小1.71MB属于高等教育数据库课程设计的典型文档资料。已有202人浏览学习。文档除完整课程设计正文外还包含成绩评定表、提交规范及考核方式说明并提供了发放标准信息、发放信息、给付开户信息等多张表的字段设计样例可直接对照练习或作为撰写课程设计报告的模板参考。1. 一份能直接改写的数据库课程设计先说清这份 doc 能干什么拿到“保险-数据库课程设计---副本.doc”这份文档多半是为了一件事——把“信息系统数据库技术一”的课程设计交掉而且想交得规范、少返工。这份 doc 不是零散的实验报告而是一套完整走完“提出问题 → 业务分析 → E-R 模型 → 关系表设计 → Access 2003 实现 → 调试说明 → 评分表”闭环的课程设计模板业务主题是社会养老保险覆盖参保、缴费、发放、终保、退保、转出、给付开户七个核心状态总共涉及 14 张数据表。适合两类人一类是还没定题直接拿这个业务域换汤不换药改成自己的设计另一类是表已经建了但文档组织混乱需要按它的章节结构重新排版、补 E-R 图和约束说明。换句话说它给的不是答案是一套可以直接改写的骨架。2. 业务拆解先行从原始单据提炼实体与 E-R 关系2.1 为什么先画 E-R 图再建表而不是打开 Access 直接建课程设计的评分表里E-R 模型设计单独占了一整块评分项业务分析是否全面、模型设计是否合理、描述是否清晰都被列出来逐项打分。但很多学生是反过来做的先打开 Access 建一堆表再回头补一张 E-R 图交差结果就是实体和属性对不上联系全靠后期硬凑。这份文档的做法值得借鉴——它把每一步业务操作都先还原成原始单据再从单据里抽实体、抽属性、找联系最后才落到表结构。这个顺序不是走形式而是因为 E-R 模型本质上是对业务的抽象业务单据里出现的一个名词往往就是一个候选实体或一个候选属性单据之间的勾稽关系就是表间联系的来源。以缴费业务为例原始单据是“临时缴费明细”上面有缴费流水号、缴费日期、缴费金额。但缴费不会只发生一次同一个参保人会累计多次缴费于是需要“缴费账户”来存个人缴费总额同时每次缴费往往是一个村或一个集体统一交的批量操作于是又引出“缴费批次”批次里有缴费总额和缴费人数。一张简单的缴费单据拆出了明细、账户、批次三个不同粒度的实体。如果不先做这个拆解直接把单据字段堆成一张大表后面必然出现大量重复数据和更新异常。2.2 从原始单据到实体这 14 张表是怎么被一步步抽出来的把文档里每一类业务单据按实体抽出来可以看到一个清晰的脉络。人员档案信息是最核心的实体个人编号、姓名、身份证号、性别、民族这些字段对应参保人本身而集体、乡镇、机构三个实体构成了人员的三级归属体系——一个参保人必然属于某个集体集体属于乡镇乡镇属于机构这是典型的层层一对多关系。如果把这些归属直接塞进人员档案表里存中文名称数据冗余会非常严重这也是文档要把它们单独拆成表的原因。再往下看开户、终保、退保、转出、发放每一类业务都对应独立的单据实体给付开户信息记录补贴额和开户日期终保信息记录返还金额和终保日期退保信息记录返还金额和退保日期转出信息记录新集体、新乡镇、新机构编号和转出日期发放体系则拆成发放标准信息和发放信息两张表——标准信息存的是“该发多少”按个人编号加起始年月、截止年月确定发放金额发放信息存的是“实际发了多少”按个人编号加发放年月逐月记录。这种拆分区分了标准与流水是发放类系统里很常见的设计思路避免每个月重复存储同一个标准金额。2.3 用参保人的业务状态把整个流程串起来这些实体不是孤立的它们对应参保人的完整生命周期。一个人先是参保建档落入人员档案信息然后缴费产生临时缴费明细汇总进缴费账户按批次归集达到领取条件后按发放标准逐月发放产生发放信息期间如果个人信息或归属变化走人员变更记录不想保了走退保信息换地区了走转出信息原档案不变而是记下新的集体、乡镇和机构最终结束参保走终保信息。这七个状态把 14 张表串成了一条完整的业务链。文档里把这几个状态对应的 E-R 模型分成了九张图来画每一张都是局部视角最后再合并成整体 E-R 模型。这个“先局部后整体”的做法很实用因为直接画整体图容易漏联系按业务单据逐张画每张图的实体数量少、关系清晰合并时只需要把同名的公共实体比如人员档案信息对接起来。实际做课程设计时我也建议这样推进先按业务单据画分图再画总图总图里公共实体会自然浮现。提示实体抽取时坚持“一个单据里的独立名词只出现一次”的原则。如果“缴费账户”里出现了“个人缴费总金额”而临时缴费明细里有“缴费金额”两者是汇总关系不是重复存储要在文档里说明这是可计算字段。3. 把 E-R 落成 14 张表主键、外键与 4NF 规范化的取舍3.1 从 E-R 模型到关系表的转换规则E-R 图完成后下一步是把实体转成表、属性转成字段、联系转成外键。转换规则有三条一是每个实体一张表实体的属性就是表的字段二是一对多联系在“多”方表中增加“一”方的主键作为外键比如一个乡镇下有多个集体集体表里就存乡镇编号三是多对多联系必须拆成中间表不能把两边的字段堆在一起。这份文档里大多数联系是一对多外键的落点很清楚。人员档案信息表里存了集体编号、乡镇编号、机构编号三个外键但这个设计有个细节要注意——它实际是把三级归属用三条外键同时挂在人员表上而不是只挂最末级的集体编号再逐级向上查。这样做的好处是查询时不用连续 JOIN 两次才能拿到乡镇和机构名称代价是如果人员调整归属三个外键要同步更新存在一定的冗余。在课程设计文档里这种设计可以用“查询性能优先通过应用程序保证同步更新”来给评委一个交代如果不想担这个解释成本更稳妥的做法是人员表只存集体编号乡镇和机构通过集体表的上级关系逐级获取。3.2 核心表结构拆解人员档案、缴费与发放人员档案信息表是核心中的核心字段设计如下字段名称数据类型索引约束个人编号文本50有无重复主键NOT NULL姓名文本50有有重复NOT NULL身份证号文本50有无重复NOT NULL性别文本50有有重复NOT NULL民族文本50有有重复NOT NULL集体编号文本50有有重复外键NULL乡镇编号文本50有有重复外键NULL机构编号文本50有有重复外键NULL这里出现了两个值得注意的点一是身份证号用文本而非数字这是对的因为身份证号不做算术运算而且可能包含 X二是外键字段允许为空对应那些尚未分配到集体或机构的参保人。但注意文档里字段名叫“乡镇名称”“机构名称”“所属集体名称”实际存的是编号值命名上的不精确虽然不影响运行但答辩时容易被问到建议自己写文档时统一改成“集体编号”“乡镇编号”“机构编号”。缴费相关的三张表是另一个规模较大的设计。临时缴费明细以缴费流水号为主键存缴费日期、缴费金额外键指向人员档案和个人缴费批次缴费账户同样以缴费流水号为主键但多了个人缴费总金额这个汇总字段缴费批次则以批次编号为主键存缴费总额和缴费人数。明细与账户的区别在于粒度明细每笔一条账户是同一参保人多次缴费的汇总视图。在 Access 里实现时账户表可以完全不做物理存储而是用“查询”对象按个人编号对明细做汇总但文档选择了实体化这张表理由是高频查询缴费总金额时能少做一次聚合。3.3 一对多联系落表转出信息的外键设计有讲究转出信息的表结构提供了一个反直觉却合理的外键设计表中同时存储新集体编号、新乡镇编号、新机构编号和转出日期而不是把原档案的归属字段改掉。这样做的意义在于保留了历史轨迹——转出前在哪、转出后去哪都在转出信息表里留痕人员档案中的原归属字段不受影响。如果直接 UPDATE 人员档案里的归属字段转出记录和原归属就会永久丢失后续对账和审计都无从谈起。这种“不覆盖旧值、另建变更表”的思路在整个系统里贯彻得很彻底人员变更记录表专门存变更流水号、变更起始日期、变更截止日期、变更内容外键指向个人编号。无论缴费、发放还是归属调整都遵循“原表不动新增记录”的原则。做课程设计时把这个设计理念写进文档的“系统概述”或“数据库设计”章节会让整体评分明显上一个档次因为这体现了对数据历史完整性的理解而非只满足于把表建出来。3.4 规范到 4NF为什么要拆得这么细课程设计要求表结构达到 4NF如有特殊情况需说明理由。4NF 的核心要求是消除多值依赖比 3NF 更进一步的地方在于当一个表里出现“一个主键对应多组独立的多值属性”时要把它们拆开。这套系统里所有业务单据都已经拆成独立实体天然满足 4NF不需要额外处理。真正需要解释的是冗余字段比如缴费账户里的“个人缴费总金额”。按 4NF 的严格定义这个字段可以从临时缴费明细汇总得出属于冗余。课程设计里遇到这种情况标准做法是在文档中主动说明“个人缴费总金额为冗余字段由临时缴费明细按个人编号汇总得出保留该字段用于减少高频查询的聚合计算开销。”一句话既承认了冗余又给出了合理理由评委通常不会扣分。反过来如果闷不做声地放一个冗余字段又不说原因很容易被判“规范化不足”。4. 在 Access 2003 里动手建表 SQL、六类约束与表间关系4.1 两种建表方式表设计器与 SQL 视图Access 2003 里建表有两种路径。大多数学生习惯用表设计器一行一行填字段名称、数据类型、索引属性直观但慢另一种是在查询设计视图里切到 SQL 视图直接执行 CREATE TABLE 语句适合批量建表。这份文档里的表结构非常规整字段名、类型、约束都定义好了用 SQL 视图成批创建效率更高而且便于在文档里附上可复现的脚本。以下是以发放标准信息表为例的 Access 可执行建表 SQLCREATE TABLE 发放标准信息 ( 个人编号 TEXT(50) NOT NULL, 起始时间 DATETIME NOT NULL, 截止时间 DATETIME NOT NULL, 发放金额 CURRENCY DEFAULT 0, CONSTRAINT PK_发放标准 PRIMARY KEY (个人编号, 起始时间), CONSTRAINT FK_发放标准_人员 FOREIGN KEY (个人编号) REFERENCES 人员档案信息 (个人编号) );这段 SQL 在 Access 2003 的查询 SQL 视图中可以直接执行。逻辑说明TEXT(50) 对应文档里的“文本50”DATETIME 对应“日期/时间”CURRENCY 对应“货币”DEFAULT 0 实现了“默认值0”的约束CONSTRAINT PK_发放标准 PRIMARY KEY (个人编号, 起始时间) 定义了复合主键与文档中“个人编号 起始时间”双主键的设计一致外键约束把发放标准挂到人员档案表上保证不存在没有参保人员的发放标准。参数说明这里主键用了复合形式因为同一参保人在不同时间段可能适用不同发放标准只有个人编号无法唯一确定一条记录。如果业务上保证每个人只有一条标准就可以把主键简化为单字段。建其他表时只需替换表名、字段列表和约束名注意 Access 对字段类型的关键字要求——文本必须写 TEXT(n)金额用 CURRENCY日期用 DATETIME。4.2 六类数据约束的落地方式这份文档里的约束可以归纳成六类每一类在 Access 里的实现方式不同。主键约束通过 PRIMARY KEY 定义保证记录唯一文档里所有主键字段都设置了“有无重复”索引外键约束通过 REFERENCES 建立配合关系窗口中的“实施参照完整性”选项NOT NULL 约束在字段定义后加 NOT NULL 关键字对应文档中“NOT NULL”标注默认值约束通过 DEFAULT 实现文档里大部分金额字段默认值都是 0唯一索引通过 UNIQUE 或“有无重复”索引实现典型是身份证号和流水号最后是非空与格式约束Access 的字段属性里可以设置“允许空字符串”和“输入掩码”比如身份证号可以用输入掩码限制为 18 位字符。以缴费账户表为例完整建表语句如下CREATE TABLE 缴费账户 ( 缴费流水号 TEXT(50) NOT NULL, 缴费日期 DATETIME NOT NULL, 个人缴费总金额 CURRENCY DEFAULT 0, 缴费批次编号 TEXT(50) NOT NULL, 个人编号 TEXT(50) NOT NULL, CONSTRAINT PK_缴费账户 PRIMARY KEY (缴费流水号), CONSTRAINT FK_缴费账户_批次 FOREIGN KEY (缴费批次编号) REFERENCES 缴费批次 (缴费批次编号), CONSTRAINT FK_缴费账户_人员 FOREIGN KEY (个人编号) REFERENCES 人员档案信息 (个人编号) );这里缴费流水号是主键与临时缴费明细共享同一套流水号体系但表间没有外键关联——两表是同一数据的不同视角而非父子关系这个要在文档里说明清楚否则答辩被问到“为什么明细和账户没有外键”时容易答不上来。个人缴费总金额默认值 0 是为了配合 UPDATE 语句的累加操作每一次新缴费插入临时缴费明细后用一条 UPDATE 语句更新缴费账户的汇总值。4.3 关系窗口里的表间联系与参照完整性SQL 建表完成后还需要在 Access 的关系窗口中确认表间联系。打开“工具 → 关系”把 14 张表全部添加进来用鼠标从人员档案信息的“个人编号”拖到各业务表的外键字段上弹出的编辑对话框里勾选“实施参照完整性”和“级联更新相关字段”但不要勾选“级联删除相关记录”。原因很实际如果删除了一个参保人他的缴费流水、发放记录、变更记录全部级联删除审计数据就没了课程设计阶段的测试数据可以手动清理不能依赖级联删除。关系窗口里会出现一组放射状的一对多连线所有业务表都汇聚到人员档案信息这个中心。检查这些连线时注意两点一是每一根连线都要勾上参照完整性否则 Access 只把它当普通绘图不做实际校验二是转出信息表的三个外键新集体、新乡镇、新机构也要分别连到对应表不能因为它们存的是“新”值就跳过关系建立。4.4 用查询对象替代视图把业务状态查出来Access 2003 没有独立的视图对象查询Query承担了视图和存储过程的双重角色。课程设计要求“实现各种业务状态的查询”这一步就用查询对象落地。最常见的做法是建一个参数查询按个人编号查询某参保人的全部缴费记录SELECT 临时缴费明细.缴费流水号, 临时缴费明细.缴费日期, 临时缴费明细.缴费金额 FROM 临时缴费明细 WHERE 临时缴费明细.个人编号 [请输入个人编号] ORDER BY 临时缴费明细.缴费日期 DESC;方括号里的内容在 Access 运行查询时会弹出输入框提示输入个人编号这就是参数查询适合课程设计演示环境不需要写窗体就能交互式查询。更复杂的业务状态比如“计算某批次缴费总额”可以用聚合查询SELECT 缴费批次编号, SUM(缴费金额) AS 批次实际金额 FROM 临时缴费明细 GROUP BY 缴费批次编号;把这条查询保存为“查询_批次缴费汇总”再与缴费批次表里的“缴费总额”字段对比就能验证批次数据的一致性。课程设计文档的“调试运行说明”部分就需要准备这类查询结果截图作为验证证据。5. 避坑记录Access 课程设计最常见的五个翻车点5.1 身份证号用数字类型导致前导 0 丢失现象录入身份证号时号码以 0 开头提交后前面的 0 没了号码变成 17 位而且显示成科学计数法样式。原因建表时把身份证号字段设成了“数字”类型。身份证号不是数值不做加减乘除运算数字类型还会截断前导 0并且超过 15 位后丢失精度。解决统一改成文本类型长度按文档要求设为 50但实际建议设为 18 或 20避免过长。如果已经建完表用设计视图把字段类型改成“文本”再检查已有数据是否有精度丢失丢失的手动补录。血的教训是凡是编号类字段一概用文本哪怕它全是数字。5.2 Access 2003 的 .mdb 文件打不开或功能缺失现象在自己电脑的 Access 2019 或 WPS 里操作正常交到老师那里用 Office 2003 打开提示“不可识别的数据库格式”或者某些功能直接报错。原因新版 Access 默认创建 .accdb 格式Access 2003 只能用 .mdb 格式同时新版自动启用的某些功能在旧版里不被支持。解决课程设计明确要求基于 Access 2003那就从头创建 .mdb 文件或者用 Access 2003 打开后执行“工具 → 数据库实用工具 → 转换数据库”改成 2003 格式。我一般会在全部建表完成后专门用一台安装了 Office 2003 的环境做一次完整打开和查询操作确认无报错再交盘。这一步能避免绝大多数“到我电脑上打不开”的尴尬。5.3 日期字段格式不统一查询结果排序错乱现象发放年月、缴费日期这些日期字段有的记录显示“2024-01-15”有的显示“2024/1/15”按日期排序后发现 1 月排到了 12 月后面。原因录入时没有统一格式系统把部分文本自动识别成了字符串日期排序变成了文本排序。解决所有日期字段的“格式”属性统一设为“短日期”yyyy-mm-dd输入时也必须按这个格式录入。更省事的办法是在表设计视图的“输入掩码”里给日期字段设置掩码强制统一。还有一条日期类型的空值要区分“NULL”和“空字符串”日期字段里出现空字符串排序时也在最前面容易干扰测试数据检查。5.4 外键没有实施参照完整性孤儿数据遍地都是现象删掉一个参保人后他的缴费记录还在查询缴费明细时关联人员档案拿不到姓名或者手工往临时缴费明细里插入一条不存在于人员档案的个人编号系统毫无阻拦。原因关系窗口里确实拖了连线但“实施参照完整性”没有勾选Access 只画了图没有做约束。解决双击关系连线勾选“实施参照完整性”和“级联更新相关字段”。然后跑一遍验证查询——找出所有在临时缴费明细中但不在人员档案中的个人编号SELECT DISTINCT 临时缴费明细.个人编号 FROM 临时缴费明细 LEFT JOIN 人员档案信息 ON 临时缴费明细.个人编号 人员档案信息.个人编号 WHERE 人员档案信息.个人编号 IS NULL;返回空结果说明关联是干净的。这个查询建议直接放进文档的调试运行说明部分比文字描述更有说服力。5.5 冗余字段没写理由被判定不符合 4NF现象答辩时评委指着缴费账户表的“个人缴费总金额”问这个字段能从明细算出来为什么放在表里回答不上来评分表上“符合 4NF”一格被扣分。原因文档里只列出了表结构没有对冗余字段做规范化说明。课程设计要求本来就写明“如有特殊情况未达到 4NF 需说明理由”不写就是主动放弃解释机会。解决在数据库设计章节加一小段说明写清楚“个人缴费总金额”为冗余字段语义是汇总值由临时缴费明细实时聚合得出保留它只为减少高频查询的聚合开销。用一句话把设计意图讲明白规范性与性能的取舍就交代清楚了。6. 把这套设计改成你的换业务换数据文档与评分表对齐拿到这份资源最有效的用法不是原样照抄而是用三天时间把它改成一份“看起来就是你做的”课程设计。第一步是换业务名词把“社会养老保险”换成你被分配到的题目把“参保人”换成对应业务里的用户称谓把“缴费”“发放”“退保”这些业务状态与你的题目逐一对照——如果题目是“小区物业管理系统”缴费对应物业费缴纳退保对应退房结算转出对应业主变更业务状态映射清楚了表结构改起来就是批量替换的事。第二步是重建归属体系把集体、乡镇、机构三级结构换成你业务里实际的层级比如小区、楼栋、单元三个表的外键关系原样保留。第三步是清理冗余字段如果新业务里没有高频查询汇总金额的需求把“个人缴费总金额”这类冗余字段直接删掉顺便就把 4NF 的说明省了。测试数据这块我常用一条偷懒但高效的路子在 Excel 里按字段列生成 50 条以上模拟数据身份证号用随机 18 位数字校验位生成器日期用“起始日期随机步长”的方式铺满一个自然年然后另存为 CSVAccess 里选择“文件 → 获取外部数据 → 导入”一步到位。关键点是数据量不能太少只放三五条在调试运行说明里截图很难看放三五十条才能体现验证数据丰富的评分项。导入后把前面说的“孤儿数据检查查询”和“批次总额核对查询”各跑一遍结果截图放进文档的调试运行章节这一部分的评分就稳了。最后是拿评分表逐项自查。课程设计评分表分报告文档、E-R 模型设计、数据库设计、数据库实现、平时作业五块每块都有“优秀”的明确描述。我的习惯是提交前对照“优秀”列逐条过一遍业务分析是否全面、E-R 模型描述是否清晰、表设计是否符合 4NF、约束是否合理、验证数据是否丰富任何一项存疑就直接改文档而不是心存侥幸。文件命名按“学号姓名”来文档和数据库文件都要单独存盘别把数据库嵌在 Word 里交上去。从那以后我每次做完数据库课程设计都会强制自己走一遍“评分表逐条自查 旧版 Access 打开测试 孤儿数据验证查询”这三件事再赶时间也不跳过。这三步帮我在不同老师手里都拿过还不错的分数希望也能帮你少踩几个坑。本文还有配套的精品资源点击获取
返回列表