重构机房收费系统——数据库设计

本文探讨了机房收费系统重构过程中的数据库设计,包括数据抽象、概念模型构建及ER关系图绘制,强调了数据库设计的重要性,并通过实例说明了如何遵循一至三范式原则优化数据库结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           曾记得,第一次编写机房收费系统的文档模板,整整有12个文档需要编写,仅仅花了两三天的时间就让师傅验收,完结项目,就这样囫囵吞枣的文档编写完成了。 要知道:欠下的账,终究是要还的。现在到了机房收费系统个人版重构阶段,
(1)进行数据抽象,设计局部概念模型;
(2)将局部概念模型综合成全局概念模型   
(3)就可以按要求绘制机房收费系统数据库概念设计模型——ER关系图。
可以说,之前的数据库的概念设计给我奠定了一丢丢的设计基础,外加《数据库系统原理》中的三范式定理,本着求知好学、虚心请教的理念,于是乎发表这篇博客,希望大家多多指正。


            在数据库设计中,理清ER关系图是尤为重要的。但往往是,我们根本理不清,有一种剪不断,理还乱的感觉有木有……有木有。
先睹为快:      




1、第一范式1NF
定义:数据库表中的字段都是单一属性的,不可再分。
通俗简单的说每一个属性都是原子项,不可分割。

如:地址这个属性就必须拆分为 省、区、街、乡、道这几个单值属性。

2、第二范式2NF
定义:如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键。

通俗简单的说,在满足第一范式的前提下,当某张表中的非主键信息不是由整个主键函数来决定时,即存在依赖于该表中不是主键的部分或者依赖于主键一部分的部分时,这就不满足2NF的关系模式

如:原版的机房收费系统学生表,可以拆成 学生信息表 和 卡表。这样就满足了第二范式。

3、第三范式3NF
定义:如果关系模式R是1NF,且每个非主属性都不传递依赖于R的候选键。

通俗简单的说,消除没有直接依赖于第一范式和第二范式形成的表的主键的属性,为没有与表的主键关联的所有信息建立了一张新表。每张新表保存了来自原表的信息和它们所依赖的主键。

如:管理员的级别【Level】由用户名称【UserID】决定,而【UserID 】由上网的学生的【StudentNo】和【CardNo】来判断,由此产生了传递依赖,第三范式往往就是消除传递的依赖的作用。


实践是检验真理的唯一标准。这话说的真没错,自己冥思苦想半天,不如动手一画来得快,画着着画着,之间的关系就越来越明确了。

再次看一下张机房收费系统——ER 图吧(申明:本人的图必有瑕疵……小的望大爷大神们多多海涵,小的真在努力学习ing)


从我的ER图中可以清晰的观察到各个实体间的关系和实体的属性,以及实体间的联系。从而可以转换成关系模型。如何转换自己百度一下吧。



个人机房重构才刚刚开始……这开头路似乎有点太是艰难了,归宗与自己造的孽,打碎牙也只能往肚子里咽,一步一步走下去,一定能行的。

### MySQL视图与ER图设计中的实体关系模型 #### ER图基础概述 实体关系模型是一种用于描述数据及其相互之间关联的概念工具,其核心组成部分包括实体、关系以及属性[^1]。通过这些基本要素,可以构建清晰的数据逻辑结构。 #### 数据库设计背景 在实际项目开发过程中,例如个人重构机房收费系统数据库设计阶段,需要综合运用《数据库原理》的知识点来完成具体的设计工作[^2]。这种实践经验有助于加深对理论的理解并提升应用能力。 #### Mysql期末考试重点解析 针对Mysql期末试题中涉及的ER图绘制部分,考生应掌握从需求分析到最终形成规范化的关系模式这一完整流程。其中包含了但不限于以下几个方面:确定业务领域内的主要对象作为候选实体;定义各实体间存在的各种可能联系形式;为每一个识别出来的实体分配相应的特征字段即属性列表等等[^3]。 #### 合并局部ER模型策略 当面临多个相对独立又存在某种程度上交集的小范围子系统时,则可采取逐步融合的方法来进行全局视角下的整体架构规划。此过程通常遵循如下原则顺序执行操作——优先处理那些彼此间具备明显交互行为或者共享相同类别定义的部分;接着考虑剩余尚未纳入统一框架体系之内的其他单独模块直至全部整合完毕为止[^4]。 #### 关于MySQL视图的应用场景探讨 - **定义**: 视图(View),本质上是一张虚拟表,由一条SQL查询语句的结果所构成。 - **功能特点** - 提供了一种简化复杂查询的方式; - 能够实现一定程度上的安全控制机制,只暴露特定列给指定用户组访问而隐藏其余敏感信息项; - 支持基于已有物理存储表之上创建新的逻辑层次结构以便更好地满足不同应用场景的需求。 下面展示一段简单的关于学生选课情况统计使用的视图声明代码: ```sql CREATE VIEW StudentCourseStats AS SELECT s.StudentID, COUNT(c.CourseID) AS CourseCount FROM Students s JOIN Enrollments e ON s.StudentID = e.StudentID JOIN Courses c ON e.CourseID = c.CourseID GROUP BY s.StudentID; ``` 上述脚本片段展示了如何利用现有三张真实存在的表格(Students、Enrollments 和Courses),并通过它们之间的键值匹配建立连接之后计算每位同学总共注册了多少门功课的信息汇总成一个新的呈现界面供后续调用查阅[^5]。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值