【个人机房重构】——创建数据库三部曲

  进行过了基础三层思想的熏陶,马上就进入了个人机房重构的阶段,感觉自己这只菜鸟中的菜鸟,任重而道远。要想建造高楼大厦,必须有水泥、砖瓦。数据库是管理数据资源的容器,下面是我自己建表的过程,如果有不妥的地方,还请大家指正!

一、“三范式”了然于胸

好处:关系数据库的规范,为了减少数据冗余。满足三范式,说明数据库比较健全,数据冗余少,后期维护方便。

详细内容:

第一范式(1NF):数据库表中的字段都是单一属性,不可再分,确保了每列的原子性。

例如:住址 就要拆成  省份 城市,直到不能拆了为止。

第二范式(2NF):第一范式的升级版~目标是确保表中的每列都和主键相关。

例如:比如要设计一个学生考试成绩表(表1),联合主键是学号和课程。学号作为主键,学分仅仅跟课程相关。这样就违背了第二范式的设计原则。

所以,遇到这样的情况,我们就应该把这个表进行拆分,把学生信息分离到一个表(表2.0),课程信息分离到另一个表(2.2).

        如果不拆分,会出现什么问题?

数据冗余:如果1个同学选修n门课程,那么学生信息就会被重复n-1次(表3的1区是数据冗余的地方),n个同学选修1门课程,课程和学分也会被重复n-1次。

更新异常:如果需要更新一门课程的学分,表中所有的学分都要更新,否则会出现同课不同学分的情况。

如果增加课程,暂时没有学生选修,没有主键:学号,就不能再数据库中存入课程信息。

删除异常:如果一批学生毕业,要删除成绩记录,课程名称、学分都会被删除,难不成还要等开学了,进来一批新的学生再填进去???

第三范式(3NF) :在第二范式的基础上更进一层。确保每列都和主键列直接相关,而不是间接相关。

例如:一个学生信息的表(表4),存在决定关系:学号——>姓名、年龄、性别,还存在下面的决定关系

学号——>卡号——>余额、状态,存着余额、状态对学号的传递依赖,是间接相关的。违反了第三范式的原则。

因此把它拆分成表5和表6就很完美啦!

当然第三范式也会出现数据冗余、更新异常、删除异常,详情与第二范式的类似。

二、“E-R图”分析利器

 E-R(Enitity Relationship diagram) :提供了表示实体、联系、属性的方法,用来描述宏观世界的概念模型。

  下图这是我画的E-R图。画图的过程是理清思路的过程。当初对充值、退卡等表只是会用,知道确定一个表里面有卡号、操作者的ID等信息。当时还觉得ID挺多余的,不过现在发现它和卡号组成了联合主键,起的作用还不小~

三、”SQL建表“落到实处

  个人感觉,这个地方的建表,建表语句并没有什么难的地方,重点要注意以下几点:

1.命名为什么要规范?

没有规矩不成方圆。命名是专业素质的一种体现,同时规范的命名也便于我们后期的修改、维护。

2.数据类型是char 还是 varchar?

char是定长的,当输入的字符小于指定的数目,char(8),输入的字符小于8,它会在后面补空值。如果大于8,会截取超出的字符。

varchar是长度为n个字节的可变长度且非Unicode的字符数据。n是介于1-8000之间的数值。相对节省存储空间。

因为char固定长度,所以在处理速度上要比varchar快很多,但是相对比较费存储空间,所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar.

其他字段的数据类型也要选择合适的,不能全部写成char类型了。

3.建表完成后不允许修改字段怎么办?

在SQL SERVER2008中,新建的表无法修改字段名和增加字段名。可以选择菜单里面  工具——选项——Designers——表设计器和数据库设计器,去掉勾即可。

四、总结

  每次到最后都要扯上一点点自己的感受,以此记录我献身于计算机事业的心路历程(此处应该有掌声

O(∩_∩)O~)。建表给我最大的感触是:1.不怕不知道,就怕不知道。三范式,E-R图开始并没有好好的钻研过,只是知道它对建表有很大用处。虽不知,但是用的时候知道,就马上能学,节省了很多走弯路的时间。

2.写东西是自己的看的,大不了恶心了别人~别人说的再好,自己照别人的操作一遍,也不如自己写一遍博客印象深刻。3.时间管理真是救苦救难的活菩萨啊!自从被老师逼着,认真的学了几天时间管理,发现头不疼了,眼不花了,干事有重点了,每天活的都很有成就感,很快乐。还没几天,自我感觉就不错了,坚持下去,小菜鸟有一天一定会成大鸟的,吼吼~

  

【个人机房重构】——创建数据库三部曲

时间: 2024-10-26 23:22:52

【个人机房重构】——创建数据库三部曲的相关文章

机房重构之数据库设计

一.画ER图 E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联 系的方法,用来描述现实世界的概念模型. 绘制方法: ⑴确定所有的实体集合 ⑵选择实体集应包含的属性 ⑶确定实体集之间的联系 ⑷确定实体集的关键字,用下划线在属性上表明关键字的属性组合 ⑸确定联系的类型,在用线将表示联系的菱形框联系到实体集时,在线旁注明是1或n(多)来表示联系的类型 二.将ER图转化成关系模式 1:1 :例如 CardInfo 和StudentInfo 

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

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

机房重构--数据库设计(二)

在完成了机房收费系统数据库需求分析.ER图.关系模型的阶段之后,就该根据关系模型来设计数据库了,下面是我对这个阶段的一个总结. 这次的关系模型有用户.学生.卡.基本数据.电脑.账单.工作记录.充值.退卡.上机共10个,要由这10个关系模型来设计数据库表,其中对于电脑(电脑名  系统时间  系统日期)这个关系,没有必要单独拿出来设计,其他的几个都需要转换成数据表,在确定了哪些关系模型需要转换为关系表之后,就需要分析的数据表字段的明确以及数据表三范式的规范的确定. 先来重温下数据库设计三大范式: (

机房重构(3)——存储过程

在敲机房收费过程中我们都会遇到这样的问题:很多功能实现都需要涉及到多张表的操作,比如充值.退卡.结账等功能的实现.这就需要我们多次对数据库进行操作,不仅代码量大大增加,而且执行效率也会大打折扣.为了提高效率,于是,存储过程就华丽登场了. 1.简介 存储过程是一组为了完成特定功能的语句集,经过编译后存储在数据库中,用户通过制定存储过程的名称并给出参数来执行它.存储过程在运算时生成执行方式并存储在数据库当中,当其再次运行时速度比单个的SQL语句要快.    2.优缺点 1)优点 a.复用性强.存储过

#【数据库】机房收费系统数据库设计

前言 前一段时间要参加自考,要考<数据库原理>,在其中也更加了解了好多数据库的问题.比如,如何创建一个好的数据库,怎么创建数据库. 图一 数据库创建框架 现在开始机房的重构,以前用的是师哥师姐设计的数据库,现在发现自己也可以设计出来了,所以,按这步骤来自己设计一个机房收费系统的数据库. 一.规划 由于机房收费系统是第二遍做的,所以在总体规划阶段很容易看出系统在技术.经济.效益.法律是可行的:目标就是要更好的搭配应用程序合理运行. 二.需求分析 这一阶段是计算机人员(系统分析员)和用户双方共同收

机房重构 抽象工厂+反射+配置文件

重构机房已经开始三个多星期了,从刚开始的一头雾水,到现在的柳暗花明,由开始的无从下手,到现在感觉犹 如脱胎换骨了般.和两个星期前相比,现在明朗了多了,心情也好了不少. 先给大家看一下这次重构的整体架构图: 在前面一篇博文中对三层(UI.BLL.DAL.Entity)http://blog.csdn.net/zhangzijiejiayou/article/details/38226135做了详细的介绍. 本篇博客着重总结一下在三层的基础上我所做的改进,也就是传说中的七层. 1.Facade层(外

【机房重构】SQL之视图

最近在重构机房收费系统,越往后就会越感觉到这里更多的是对之前学过知识(数据库,设计模式)的一种应用和回顾.比如在登录功能中用到了抽象加反射,在学生下机中,我们可以用触发器来同时更新两个表.这里就先说一下视图的使用,关于视图的有点和作用百度上有很多答案,在此不再赘述. 视图定义: 自己理解:在涉及到多张表的操作的时候就可使用视图.这样可以避免与数据库直接联系.并且当你更新数据库数据时,就会自动更新视图中的数据,方便以后查询. 百度百科:计算机数据库中的视图是一个虚拟表,其内容由查询定义.同真实的表

机房重构(4)——触发器的使用

上篇文章<机房重构(3)--存储过程>介绍了存储过程的使用,接下来介绍一下触发器的使用.说到触发器,我们并不陌生,我们学习过程中涉及到很多相关的知识,但是欠缺的实践应用.通过这次机房收费,对触发器有了进一步的理解. 1.简介 触发器也是一种与表事件相关的特殊的存储过程.由事件来触发,当对一个表进行操作(insert,delete,update)时就会激活它执行.经常用于加强数据的完整性约束和业务规则等.它与存储过程的区别是触发器不能执行EXCUTE语句调用,而是在用户执行Transact_SQ

【机房重构】—触发器经营离婚事务所

最近了解到了触发器,现在我的理解是更喜欢把触发器当成特殊的存储过程(触发器:通过对这个表的操作为依据处罚之后可以对另外的表进行一系列操作),那么此刻我就将触发器如何经营离婚事务所的过程和大家分享: 一.经营漏洞(触发器的缺点): 当一对夫妇有了闪离的念头,冲动之余就拿着结婚证来找触发器(离婚事务所)了:此时触发器是不会在乎你俩是否真的认定了要离婚(是否应不应该触发这个事件),只要你将结婚证给了他并大概说一些理由,他就会给你们办理离婚手续(执行符合条件之后要处罚的过程),大家都知道,离婚手续一旦办