MyBatis的存在就是为了简化对关系数据库的访问。数据库的确非常复杂,要正确地使用它们需要做很多的工作。数据库负责管理数据和修改数据。我们使用数据库而不简简单单地使用一个 平板文件的原因就在于数据库为我们提供了许多好处,特别是在数据完整性、性能以及安全性方面。

数据完整性

数据完整性可能是数据库提供的最重要的好处了,因为没有数据完整性,其他一切就没有意义了。如果数据不是一致的、可靠的以及正确的,那它们又有多少价值呢。数据库通过使用强数 据类型,强制约束,以及使用事务从而实现数据完整性的要求。

数据库是强类型的,即一旦创建了一个数据库表,那么它的每个列就被指定为只能存储某种特定类型的数据。数据库管理系统保证了存储在表中的数据的类型相对于列是正确的。举个例子, 某个表可能将其某列定义为VARCHAR(25> NOT NULL。这就保证了存储在该列中的数据是字符且 长度不会超过25,另外定义中的NOT NULL部分保证了该数据是必需的,也即你必须为该列提供 一个值。

除了强数据类型,还可以对数据库表使用一些其他约束。这些约束通常在范围上更广,因为 它们处理的往往不只是某一列。约束通常涉及对表中多条记录(甚至是多个表)的验证。例如 UNIQUE约束就要保证表中指定列的值不重复。再如外键(FOREIGN KEY)约束,这种约束保证 表中某列的取值一定来自于关联表中的相关列。外键约束是用于描述表间关系的,因此它对于关 系数据库设计以及数据完整性非常重要,不可或缺。

数据库维护数据完整性最重要的方式之一就是使用事务。大多数业务功能都需要使用很多种类型的数据,它们往往来自不同的数据库。通常这些数据会以某种方式相互关联,因此需要一致 更新。使用事务,数据库管理系统可以保证所有的相关数据以一种一致的方式被更新。更重要的是,事务允许系统的多个用户同时更新数据而不造成冲突。关于事务还有许多知识需要了解。

性能

关系数据库可以帮助我们获得使用平板文件时很难获得的高性能。也就是说,数据库性能并不是免费的,要想获得高性能你需要大量的时间和专家经验。数据库性能可被分为3个关键因素: 设计、软件调整以及硬件。

要提高数据库的性能,首先要考虑的因素就是设计。一个糟糕的关系数据库设计带来的低效 可能用再多的软件调整和额外的硬件也无法纠正。糟糕的设计可能造成死锁、指数级的关系运算 或者是几百万条记录的数据库表扫描。正确的设计非常重要。

对大型数据库来说,软件调整是提高性能要考虑的第二重要的因素。调整关系数据库系统需 要有相应的对我们使用的特定RDBMS软件有过专门训练且富有经验的专业人士。虽然RDBMS 软件的某些特征号称是跨越各个不同的产品的,但通常每种产品都有其精妙而细微的差别,因此 需要针对该特定软件的专业人士。性能调整可以带来某些巨大的好处。例如仅仅是数据库索引的 调整就可以将原本需要执行几分钟的复杂查询变为只需几秒种。RDBMS中可调整的部分有很多, 如高速缓存、文件管理、各种索引算法,甚至还可以考虑操作系统。同一个RDBMS软件在不同 的操作系统上表现出的行为可能也是不同的,因此计对不同的操作系统也要进行不同的调整。不 用多说了,反正调整数据库软件需要付出大量的努力。数据库到底应该如何调整己经超出了本书 的讨论范围,但是知道软件调整也是一种非常重要的提高数据库性能的因素还是很重要的。请与 DBA (即数据库管理员)好好协调。

大型关系数据库系统通常对计算机硬件的要求都比较高。也正是因为这个原因,许多公司里性能最强大的服务器往往都是数据库服务器。在许多公司里,数据库就是他们的“宇宙中心”,因此 针对数据库的硬件投入大量的资金也就不足为奇了。快速磁盘阵列、I/O控制器、硬件高速缓存以 及网络接口,所有这一切对于大型数据库管理系统的性能来说都是至关重要的。有了这些,你就再 不能将硬件作为糟糕的数据库设计的借口或者作为RDBMS调整的替代了。硬件不应该拿来解决性 能问题——它应当用来满足性能需求。关于硬件更深入的讨论同样也超出了本书的范围,但当你使 用一个大型数据库系统时,考虑到这个因素还是很重要的。也还请你与DBA好好协调。

安全性

关系数据库系统也提供了额外的安全性。我们在日常工作中使用的大量数据都是保密的。近年来,个人隐私越来越受到关注,安全性已经成为所有数据都需具备的一个基本要求。基于这个 原因,甚至一个人的全名这样的简单信息也可以被认为是保密的,因为它是潜在的唯一标识信息。
其他的信息(例如,社会保险号码和信用卡账号)需要像强加密这样的更高级别的安全保护。大 多数商务性质的关系数据库都包括许多先进的安全特性,允许更细粒度的安全性以及数据加密。 每个数据库都有其独特的安全需求。最重要的是你要理解它们,因为应用程序代码绝不能削弱数 据库的安全策略。

不同的数据库有不同级别的数据完整性、性能和安全性。通常来说,数据库的大小、数据的价值以及数据库相关人员的多少会决定这些级别。

系列文章:

MyBatis知多少(1)

MyBatis知多少(2)

MyBatis知多少(3)

MyBatis知多少(4)MyBatis的优势

MyBatis知多少(5)业务对象模型

MyBatis知多少(6)表现层与业务逻辑层

MyBatis知多少(7)持久层

MyBatis知多少(8)关系型数据库的更多相关文章

  1. MyBatis知多少(13)MyBatis如何解决数据库的常见问题

    在现代软件项目中数据库通常被认为是遗留组件.它们一直以来都被认为难以使用,不论是出于技术的还是非技术的原因.大多数软件开发人员宁可从头开始完完全全地重建一个数据库. 如果数据库是遗留下来的,相信一些开 ...

  2. MyBatis知多少(12)私有数据库

    如果你从事软件开发工作有了一段时间的话,那么肯定听过关于“自己动手还是花钱购买” 的争论.该争论是说,针对一个业务问题,我们是应该自己动手构建自己的解决方案呢,还是应 该花钱购买一个声称已经解决了此问 ...

  3. MyBatis知多少(11)企业数据库

    企业数据库比应用程序数据库更大,其外部影响也更大.它们与其他系统之间存在更多的关系,包括依赖关系和被依赖关系.这些关系可能是Web应用程序与报表工具之间的,但也很有可 能是与其他的复杂系统和数据库的接 ...

  4. MyBatis知多少(10)应用程序数据库

    应用程序数据库往往是最小.最简单.也最易于使用的数据库.这种数据库往往是我们这些开发人员通常不介意使用甚至非常乐意使用的.应用程序数据库通常与我们的应用程序处于同一个项目中,两者一齐设计和实现.正是因 ...

  5. MyBatis知多少(9)不同类型的数据库

    并非所有的数据库都如此复杂,需要使用昂贵的数据库管理系统以及企业级的硬件.一些数 据库其实非常小,足以运行在一台老式的PC机上.所有的数据库都是不一样的.它们有各自不 同的需求和不同的挑战.iBATI ...

  6. MyBatis知多少(26)MyBatis和Hibernate区别

    iBatis和Hibernate之间有着较大的差异,但两者解决方案很好,因为他们有特定的领域.我个人建议使用MyBatis的,如果: 你想创建自己的SQL,并愿意维持他们. 你的环境是由关系数据模型驱 ...

  7. MyBatis知多少(26)调试

    这是很容易,同时与iBATIS的工作程序进行调试. iBATIS有内置的日志支持,并适用于下列日志库,并在这个顺序搜索他们. Jakarta Commons日志记录(JCL). Log4J JDK 日 ...

  8. MyBatis知多少(25)动态SQL

    使用动态查询是MyBatis一个非常强大的功能.有时你已经改变WHERE子句条件的基础上你的参数对象的状态.在这种情况下的MyBatis提供了一组可以映射语句中使用,以提高SQL语句的重用性和灵活性的 ...

  9. MyBatis知多少(24)存储过程

    使用MyBatis配置来调用存储过程.为了理解这一章,首先需要了解我们是如何在MySQL中创建一个存储过程. 在继续对本节学习之前,可以自行学习MySQL存储过程. 我们已经在MySQL下有EMPLO ...

随机推荐

  1. Javascript中DOM技术的的简单学习

    第十四课DOM技术概述1:DOM概述 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节 ...

  2. SAE部署django应用

    最近自己动手实现了一个博客系统,使用基于python的web框架django,运行在SAE上.以下是遇到的问题,特总结如下: 1, SAE支持的django等第三方模块的版本如下: http://ww ...

  3. 苹果App部署HTTPS进行在线下载安装

    苹果App的ipa下载需要有几个前提,可参考:Android和IOS的本地App如何安装(apk&ipa) 本文主要介绍如何部署https提供ipa的下载,步骤如下: 1. 搭建一个HTTPS ...

  4. 将数据导出到Excel2007格式。

    增加数据格式 public static void TableToExcel2(DataTable table, string filename, string sheetname) { XSSFWo ...

  5. HTML5手机APP开发入(4)

    HTML5手机APP开发入(4) 课程内容 完成一个自定义的Component用来展现通讯录用户的明细信息如下图 http://bootsnipp.com/snippets/featured/prof ...

  6. Dom4J解析xml文件动态转换为List<Bean>或者Map集合

    大家在解析大量相似xml文件的时候是否会遇到这样一个问题:冗余的代码去set定义的实体对象Bean的值,基本都是一样的操作   而且毫无任何代码价值可言所以在这写了一个简单的例子,类封装了几个方法你只 ...

  7. OpenCV仿射变换+投射变换+单应性矩阵

    本来想用单应性求解小规模运动的物体的位移,但是后来发现即使是很微小的位移也会带来超级大的误差甚至错误求解,看起来这个方法各种行不通,还是要匹配知道深度了以后才能从三维仿射变换来入手了,纠结~ esti ...

  8. U深度利用iso文件制作U盘启动盘

    利用U盘装win10系统: 工具:U深度装机版   文件:win10.iso 步骤1:下载U深度装机版安装 步骤2:打开U深度,制作U盘启动盘,注意选择iso模式,如下图所示 接下来下一步即可,工具会 ...

  9. parallels无法启动之大乌龙-流水账版

    欢迎访问我的blog:blog.thinkinside.me     早上到公司,像往日一样,开电脑倒茶喝水. 回到座位打开parallels desktop,发现不对,打开PD非常的慢.显示正在初始 ...

  10. windows 2003服务器网络异常流量的处理办法

    最近通过防火墙发现一台服务器的流量占用非常厉害,上传的流量每秒达到100—200Mb/s,几乎占掉了一半的带宽.本来那台服务器上安装了360安全卫士,360安全卫士自身带的网络防火墙只能看进程,而不能 ...