数据库小结
最近开始真正做完善的项目了,也是我第一次去认真写一份需求分析,花了我一星期的时间才勉强写出一个稍微看得过去的分析文档。都说搞软件的需求分析是头等大事,现在才真正感同身受,也明白了点一份完备详细的需求文档对整个项目开发的重要性。
写完分析后就是创建数据库了,原本以为建好数据库不过是多写几张表,但经过讨论和分析后才发现创建数据库不是自己想的那么简单,它需要对整个项目做一个深刻的分析,到底要实现什么功能,到底采用什么模式搭建,怎样实现业务逻辑。。。当把这些都考虑进去后,才发现自己对数据库的理解太过狭隘,于是利用休息时间对自己学过或了解的数据库的知识做一个较细致的总结,一方面是整理自己对数据库的理解,另一方面也是为创建项目数据库做好准备。
数据库(Database)是按照数据结构来组织、存储和管理数据的数据集合,数据长期存储在计算机内的、有组织的、有共享的、统一管理。这种数据集合尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。随着数据库技术的不断发展,数据管理从存储和管理数转变成用户所需要的各种数据管理的方式。
数据库的基本结构分为三个层次,不同层次通过映射转换:
1.物理数据层:
是数据库的最内层,是物理存贮设备上实际存储的数据集合,存贮的数据是原始数据,是用户加工的对象。
2.概念数据层:
是数据库的中间层,数据库的逻辑表示,指出了数据的逻辑定义及数据间的逻辑联系,涉及数据库中所有对象的逻辑关系。
3.逻辑数据层:
是用户所看到和使用的数据库,表示了一个或一些特定用户使用的数据集合。
主要特点:
1.数据共享
2.数据冗余度小
3.数据独立
4.数据集中控制
5.安全与可靠性强
6.故障恢复
种类:
1.数据结构模型
2.层次结构模型
3.网状结构模型
4.关系结构模型
其中关系结构为现在数据库最常用的结构模型。
数据库三大范式:
第一范式(1NF):
指数据库表的每一列都是不可分割的基本数据项, 第一范式要求数据表不能存在重复的记录,即存在一个关键字。
第二范式(2NF):
指非主属性非部分依赖于主关键字. 首先要满足第一范式,其次每个非主属性要完全函数依赖于候选键,或者是主键。也就是说,每个非主属性是由整个主键函数决定的,而不能由主键的一部分来决定。
第三范式(3NF):
指属性不依赖于其它非主属性。首先要满足第二范式,其次非主属性之间不存在函数依赖。
BC范式(BCNF):
指在第三范式的基础上,数据库表中不存在任何字段对任一候选关键字段的传递函数依赖。
设计数据库,深刻理解数据库范式是一个要点,一般的数据库最多只会涉及到第三范式,设计数据库有两个重要问题要考虑,一个是冗余,一个是性能。性能是我们最终追求的目标,但冗余更不容忽视,因为在数据库的设计中,冗余比性能更重要,性能较差只会影响到局部功能,但大量的冗余会让数据产生不可估计的异常或错误,这是我们很难直接找到的,所以在设计数据库时要权衡这两个因素,尽量做到有的放矢,从整体考虑去设计。
范式实例:
现针对各个范式举了一个数据库的实例,学生关系表 Student 中字段包括(学号,姓名,年龄,所在学院,学院地点),如果关键字为(学号,姓名)存在如下决定关系:
(学号,姓名)→(年龄,所在学院,学院地点)
这个数据库是符合 1NF 的,但是不符合 2NF ,因为存在如下决定关系:(学号)→(年龄,所在学院,学院地点),即存在非关键字段(学院地点)对关键字的部分字段 (学号)的函数依赖。若将关键字改为(学号),则存在如下决定关系: (学号)→(姓名,年龄,所在学院,学院地点),这个数据库是符合 2NF 的,但是不符合 3NF ,因为存在如下决定关系:(学号)→(所在学院)→(学院地点),即存在非关键字段(学院地点)对关键字段(学号)的传递函数依赖。它也会存在数据冗余、更新异常、插入异常和删除异常的情况。
如果把学生关系表分为如下两个表:
学生: (学号,姓名,年龄,所在学院 ) ;
学院: (学院,地点,电话)
这样数据库表就符合了第三范式,消除了数据冗余、更新异常、插入异常和删除异常。
ORM映射的定义:
ORM映射是指将关系型的数据库结构映射到java实体对象上,完成从关系数据库到java对象的转换, 其中一个表结构对应一个类,表中的一列对应类的一个属性,表中的一行数据对应类的一个对象。我们将这样的称之为pojo类或域对象。如创建一个student类,对应student表。
现在就来比较下目前的各大数据库:
1.MySQL
MySQL可以说是最受欢迎的开源数据库管理系统,目前我的项目也是用的这个数据库,个人觉得简单易学,操作方便。它有如下特点:
(1)是关系数据库管理系统
(2)开源
(3)服务器快速、可靠、易于使用
(4)服务器式作在客户、服务器或嵌入系统中
(5)目前市场上有大量的MySQL软件使用
2.SQL Server
(1)微软开发,大部分版本都只能在windows上运行
(2)是web上最流行的数据库
(3)提供了大量的web和电子商务功能
(4)易操作
3.Oracle
(1)可以说是最强大的数据库管理系统,大多用于商业领域
(2)兼容性非常好
(3)可移植性,可在多种操作系统上运行
(4)可联结性,能与多种通讯网络相连
(5)高生产率,提供了多种开发工具,方便用户开发
(6)开放性
4.Sybase
Sybase主要有三种版本:一是UNIX操作系统下运行的版本; 二是Novell Netware环境下运行的版本;三是Windows NT环境下运行的版本。对UNIX操作系统,目前应用最广泛的是SYBASE 10及SYABSE 11 for SCO UNIX。
特点:
(1)基于客户/服务器体系结构
(2)开放性
(3)高性能
5.DB2
(1)内嵌于IBM的AS/400系统上的数据库管理系统,直接由硬件支持(2)支持标准的SQL语言,具有与异种数据库相连的GATEWAY(3)速度快、可靠性好
(4)只有硬件平台选择了IBM的AS/400,才能选择使用DB2数据库管理系统。
(5)能在所有主流平台上运行(包括Windows),最适于海量数据
(6)在企业级的应用最为广泛