最近开始真正做完善的项目了,也是我第一次去认真写一份需求分析,花了我一星期的时间才勉强写出一个稍微看得过去的分析文档。都说搞软件的需求分析是头等大事,现在才真正感同身受,也明白了点一份完备详细的需求文档对整个项目开发的重要性。
写完分析后就是创建数据库了,原本以为建好数据库不过是多写几张表,但经过讨论和分析后才发现创建数据库不是自己想的那么简单,它需要对整个项目做一个深刻的分析,到底要实现什么功能,到底采用什么模式搭建,怎样实现业务逻辑。。。当把这些都考虑进去后,才发现自己对数据库的理解太过狭隘,于是利用休息时间对自己学过或了解的数据库的知识做一个较细致的总结,一方面是整理自己对数据库的理解,另一方面也是为创建项目数据库做好准备。
数据库(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)在企业级的应用最为广泛
分享到:
相关推荐
### Android数据库操作详解 #### 一、概述 在软件开发领域,数据管理是不可或缺的一环。对于Android开发者而言,SQLite数据库作为内置的关系型数据库解决方案,为应用提供了强大的数据存储功能。本文将详细介绍...
Oracle数据库是世界上最流行的数据库管理系统之一,它被广泛用于企业级应用和数据存储。本文将对在使用Oracle数据库过程中的一些常见操作进行总结。 首先,我们关注的是如何查询Oracle数据库中的外键信息。外键是...
### 北大青鸟S1《使用C#语言开发数据库应用系统》操作数据库知识点总结 #### 一、查询操作 **1. 查询单个值** 当需要从数据库中获取单个值时,可以使用`Command`对象的`ExecuteScalar()`方法来实现。以下是具体的...
这种方法适用于数据量较小的情况,避免了直接在数据库层面执行复杂的分页操作。然而,当数据量较大时,这种策略可能导致性能问题,因为它会占用更多的内存和网络资源。 五、跨数据库分页策略 为了实现跨数据库的...
在IT行业中,数据库管理和数据检索是至关重要的环节。JDBC(Java Database Connectivity)作为Java语言与各种数据库交互的标准接口,提供了强大的数据操作能力。而数据分页是优化用户体验、提高系统性能的重要技术,...
在.NET框架中,C#作为主要的编程语言之一,提供了丰富的功能来处理各种数据库操作,包括但不限于Microsoft Access和Microsoft SQL Server。以下是对如何使用C#连接这两种数据库的深入解析: ### 1. C#连接Microsoft...
### VC++中MFC使用ADO连接数据库详解 #### 一、引言 在软件开发过程中,数据持久化是一项重要的功能需求。Visual C++ (VC++) 作为一种强大的编程语言,提供了多种方式来实现与数据库的交互。其中,使用Microsoft ...
3.3.3 什么是数据库小结 3.4 表空间—Oracle的文件夹 3.4.1 表空间的名称和内容 3.4.2 表空间小结 3.5 重演日志—事务日志 3.5.1 重演日志怎样工作 3.5.2 重演日志小结 3.6 控制文件 3.7 程序 3.7.1 用户(客户机)...
3.3.3 什么是数据库小结 3.4 表空间—Oracle的文件夹 3.4.1 表空间的名称和内容 3.4.2 表空间小结 3.5 重演日志—事务日志 3.5.1 重演日志怎样工作 3.5.2 重演日志小结 3.6 控制文件 3.7 程序 3.7.1 用户(客户机)...
Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD) SQLite 目前支持...
JSP与数据库开发的结合是Web应用开发中的常见需求,因此对于想要进行Web开发的程序员而言,掌握JSP数据库开发是必备的技能。 在数据库开发中,SQL语言是与数据库交互的基石,其包括以下四种基本类型: 1. 数据定义...
### 数据库编程小结 #### 一、访问数据库技术方法 数据库编程涵盖了多种技术方法,这些方法被广泛应用于客户端和服务器端的编程中。本文旨在总结数据库编程中的关键技术和最佳实践。 ##### 1. 几种数据库访问方法...
【数据库知识小结】 在IT领域,数据库是一个至关重要的组成部分,尤其在数据管理和分析中扮演着核心角色。这里我们将深入探讨Oracle数据库以及一些常见的数据库理论和优化策略。 首先,让我们来了解一下数据库三...
MFC数据库入门小结,提供MFC数据库入门的最基本的程序运行方法