【机房重构】一步一步往上爬——数据库设计

简介:
	期末考试结束了,寒假全职生活如期而至,终于可以开始全身心的投入我的机房重构了。又是一个新的项目,万事开头难,但不开头更难。自己也只能是一步一步往上爬,机房重构便从数据库设计开始。
	回想去年的自考学习,《数据库系统原理》中的知识就可以在机房重构的时候好好应用一把了。第二章的《数据库设计和ER模型》很仔细地教了我们如何进行数据库设计。所以,在参考自考书的基础上,把重构时的数据库全新地设计了一番。
	首先明确数据库系统的生存期一般可划分为七个阶段:规划、需求分析、概念设计、逻辑设计、物理设计、实现、运行维护。有了第一遍机房收费系统的经验基础,对该系统的需求有了一定的了解,下面就从采用ER模型的数据库概念设计步骤开始写起,看看数据库是怎么一步一步设计的。
一.设计局部ER模型
	1.确定局部结构范围。划分方式一般有两种,一种是依据系统的当前用户进行自然划分,例如,机房收费系统中的用户包含学生、操作员和管理员三种用户类型;另一种是按用户要求数据库提供的服务归纳成几类,使每一类应用范文的数据显著地不同于其他类,然后为每类应用设计一个局部ER模型。例如,机房收费系统中的操作员下可划分为:注册、充值、退卡等等几类。这里我将采用第二种方式设计。
	2.定义实体。任务就是从信息需求和局部范围定义出发,确定每一个实体类型的属性和键。这里我定义的实体包括:学生、操作员和管理员。
	3.定义联系。用于刻画实体之间的关联。依据需求分析的结果,考察是否存在联系。若有联系,进一步确认是1:1、1:N,还是M:N等。
	4.分配属性。确定属性的原则是:属性应该是不可再分解的语义单位;实体与属性之间的关系只能是1:N的;不同实体类型的属性之间应无直接关联关系。
二.设计全局ER模型
	1.确定公共实体类型。一般把同名实体类型作为公共实体类型的一类候选,把具有相同键的实体类型作为公共实体类型的另一类候选。
	2.合并局部ER模型。合并原则:首先进行两两合并;从公共实体类型开始,最后再加入独立的局部结构。
	3.消除冲突。包括属性冲突,即属性值的类型不同,如数据有字符串类型,数值型等;结构冲突,同一对象在不同应用中的不同抽象,如管理员,有时充当实体,有时又是另一应用的属性;命名冲突,这在我第一次机房中的数据库设计中有很大的共鸣,那时候同一字段都采用了不同的命名,所以自己总是得回头看看在某个表中它的实际含义。
三.全局ER模型的优化
	1.合并实体类型。一般在权衡利弊后,可以把1:1联系的两个实体类型合并。
	2.消除冗余属性。一般同一非键的属性出现在几个实体类型中,或者一个属性值可从其他属性的值导出,此时,应把冗余的属性从全局模型中去掉。
	3.消除冗余联系。
在经过了上面三个大阶段之后,机房重构的ER图(不包括各个属性)就在下面了:

接着根据将ER模型向关系模型的转换,就可以将关系模式给设计出来了。
	1.如果联系是1:1,可以在两个关系模式中的任意一个的属性中加入另一个模式的键作为外键。
	2.如果联系是1:N,则在N端实体类型转换成的关系模式中加入1端实体类型的键作为外键。
	3.如果联系是M:N,则将联系类型转换成关系模式,其属性为两端实体类型的键作为外键。
下面便是机房重构数据库系统的设计表:
	最后,就是要真正开始创建新的数据库,数据表了。第一次机房的时候就是在SQL中用代码编写的,不过对于其中的各个字段的数据类型都是很含混,一点也不严谨。所以,在这次重构的时候,需要将某些类型修改一番,不可能会做到完美,但必须要做的比前一次好。在浏览相关网页的时候,发现还可以将在Visio画出的ER图直接生成数据库系统的各个表,以后一定得试试。
	学习心得:
	总体说来,之所以在机房重构的这一次将数据库的设计也详细地做了一个总结,就是在自考中学过。那时候,学三范式,画ER图,写关系模式,都只是为了考试,没有实践,更多的只是做题,也就那样过去了,而这次机房重构是一次将其加以应用的好机会。
	在此过程中,虽然花费了不少时间,但相信,数据库设计得好些,后面的路会顺利些。从这几天的机房重构过程中,我想的最多的周杰伦《蜗牛》中唱的那一句歌词:我要一步一步往上爬。我不是想做蜗牛,但我需要学习蜗牛的精神。
	所以在机房重构这阶段中,我将用此句话来总结出我的系列文章,敬请期待~~

目录
相关文章
|
BI 数据库 数据安全/隐私保护
数据库—机房收费系统系列问题
解决办法:原来这里的User_Info 和 PWD 得与数据库中的对应,大小写也得对应
数据库—机房收费系统系列问题
数据库—机房收费系统之MDI窗体与子窗体
这可怎么办?于是果断百度,百度解说,MDI窗体上是不允许放控件的,but,可以在MDI窗体上放一个picturebox控件然后就能够放控件了,于是就这样去做了。
|
SQL 数据库连接 数据库
数据库—初识机房收费系统
数据库视频终于快看完了,这几天有点想敲机房收费系统的冲动,一方面看着好多人都敲好几天了,心理有点压力吧;另一方面,对于机房收费系统的渴望却是占据了很大一部分!
|
存储 SQL 缓存
【机房重构】之数据库的操作
【机房重构】之数据库的操作
137 0
|
5天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
19 3
|
5天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
24 3
|
5天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
29 2
|
18天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
130 15
|
12天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。