谈谈数据结构的重要性

在大学里,数据结构是计算机专业必学的一门课程,很多人学完后(当然也包括我),不知道这本书里面到底讲了什么,感觉没啥实际用处。
但大家肯定会看到这么一句话,数据结构+算法=程序

工作半年后,稍微有了深一点的理解,写下这篇博文,帮助大家理解一下。

定义

其实呢,数据结构,从字面上理解就是讲了存储数据的结构。也就是说数据一般用哪些结构存储比较好,每一种结构都有其优缺点。
数据结构:主要有三大结构:线性结构、树状结构、图状结构
在这里插入图片描述

例子

其实呢,数据结构无处不在。

一、数据库

我们很多数据都是存储在数据库里的,比如SQL Server、MySql等,如果某个数据库很大,里面包含了很多很多的数据,那如何快速地查询到具体某个数据,这时,我们肯定会考虑到
1、如何存储,能够更容易查询 2、如何查,采用什么样的算法,查询的更快
这两个问题。这个时候,就体现到了数据结构的重要性了。
在数据库里,索引就是一种数据结构,主要是为了加快查询速度。

二、操作系统

我们使用的最多的就是Windows操作系统,我们打开LOL想玩把游戏,又想边玩边听音乐,这时,我们又打开了酷狗。这里就用到了数据结构中的栈,LOL是个进程,酷狗也是个进程,这两个进程存储在栈中。
打印100份文档,计算机先把这100份文档内容存到队列中,然后再依次打印。
以上这两个场景都用到了数据结构。

三、文件压缩

我们把很大的文件压缩一下,这时就用到了数据结构中树的知识,压缩具体采用了树里的哈夫曼树的知识,将文件缩小很多。

总结

数据结构虽然很重要,但作为一名程序员,说实在的,我们只需了解到熟悉的程度就差不多够了。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#版本数据结构,用C#的同志们有福啦 本书节选: 第1章 绪论 数据是外部世界信息的计算机化,是计算机加工处理的对象。运用计算机处 理数据时,必须解决四个方面的问题:一是如何在计算机中方便、高效地表示和 组织数据;二是如何在计算机存储器(内存和外存)中存储数据;三是如何对存 储在计算机中的数据进行操作,可以有哪些操作,如何实现这些操作以及如何对 同一问题的不同操作方法进行评价;四是必须理解每种数据结构的性能特征,以 便选择一个适合于某个特定问题的数据结构。这些问题就是数据结构这门课程所 要研究的主要问题。本章首先说明学习数据结构的必要性和本书的目的,然后解 释数据结构及其有关概念,接着讨论算法的相关知识,最后简单介绍本书所要用 到的相关数学知识和C#知识。 1.1 数据结构 1.1.1 学习数据结构的必要性 我们知道,虽然每个人都懂得英语的语法与基本类型,但是对于同样的题目, 每个人写出的作文,水平却高低不一。程序设计也和写英语作文一样,虽然程序 员都懂得语言的语法与语义,但是对于同样的问题,程序员写出来的程序不一样。 有的人写出来的程序效率很高,有的人却用复杂的方法来解决一个简单的问题。 当然,程序设计水平的提高仅仅靠看几本程序设计书是不行的。只有多思索、 多练习,才能提高自己的程序设计水平;否则,书看得再多,提高也不大。记得 刚学程序设计时,常听人说程序设计水平要想提高,最重要的是多看别人写的程 序,多去思考问题。从别人写的程序中,我们可以发现效率更高的解决方法;从 思考问题的过程中,我们可以了解解决问题的方法常常不只一个。运用先前解决 问题的经验,来解决更复杂更深入的问题,是提高程序设计水平的最有效途径。 数据结构正是前人在思索问题的过程中所想出的解决方法。一般而言,在学 习程序设计一段时间后,学习“数据结构”便能让你的程序设计水平上一个台阶。 如果只学会了程序设计的语法和语义,那么你只能解决程序设计三分之一的问 题,而且运用的方法并不是最有效的。但如果学会了数据结构的概念,就能在程 序设计上,运用最有效的方法来解决绝大多数的问题。 《数据结构》这门课程的目的有三个。第一个是讲授常用的数据结构,这些 数据结构形成了程序员基本数据结构工具箱(toolkit)。对于许多常见的问题,工 具箱里的数据结构是理想的选择。就像.NET Framework 中Windows应用程序开 发中的工具箱,程序员可以直接拿来或经过少许的修改就可以使用,非常方便。 第二个是讲授常用的算法,这和数据结构一样,是人们在长期实践过程中的总结, 程序员可以直接拿来或经过少许的修改就可以使用。可以通过算法训练来提高程 序设计水平。第三个目的是通过程序设计的技能训练促进程序员综合能力的提 高。 1.1.2 基本概念和术语 在本小节中,将对一些常用的概念和术语进行介绍,这些概念和术语在以后 的章节中会多次出现。 1、数据(Data) 数据是外部世界信息的载体,它能够被计算机识别、存储和加工处理,是计 算机程序加工的原料。计算机程序处理各种各样的数据,可以是数值数据,如整 数、实数或复数;也可以是非数值数据,如字符、文字、图形、图像、声音等。 2、数据元素(Data Element)和数据项(Data Item) 数据结构(C#语言版) 1.1 数据结构2 数据元素是数据的基本单位,在计算机程序中通常被作为一个整体进行考虑 和处理。数据元素有时也被称为元素、结点、顶点、记录等。一个数据元素可由 若干个数据项(Data Item)组成。数据项是不可分割的、含有独立意义的最小数据 单位,数据项有时也称为字段(Field)或域(Domain)。例如,在数据库信息处理系 统中,数据表中的一条记录就是一个数据元素。这条记录中的学生学号、姓名、 性别、籍贯、出生年月、成绩等字段就是数据项。数据项分为两种,一种叫做初 等项,如学生的性别、籍贯等,在处理时不能再进行分割;另一种叫做组合项, 如学生的成绩,它可以再分为数学、物理、化学等更小的项。 3、数据对象(Data Object) 数据对象是性质相同的数据元素的集合,是数据的一个子集。例如,整数数 据对象是{0,±1,±2,±3,…},字符数据对象是{a,b,c,…}。 4、数据类型(Data Type) 数据类型是高级程序设计语言中的概念,是数据的取值范围和对数据进行操 作的总和。数据类型规定了程序中对象的特性。程序中的每个变量、常量或表达 式的结果都应该属于某种确定的数据类型。例如,C#语言中的字符串类型(String, 经常写为string)。一 个String表示一个恒定不变的字符序列集合,所有的字符序 列集合构成String的取值范围。我们可以对String进行求长度、复制、连接两个 字符串等操作。 数据类型可分为两类:一类是非结构的原子类型,如C#语言中的基本类型 (整型、实型、字符型等);另一类是结构类型,它的成分可以由多个结构类型 组成,并可以分解。结构类型的成分可以是非结构的,也可以是结构的。例如, C#语言中数组的成分可以是整型等基本类型,也可以是数组等结构类型。 5、数据结构(Data Structure) 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问 题中,数据元素之间都不是孤立的,而是存在着一定的关系,这种关系称为结构 (Structure)。根据数据元素之间关系的不同特性,通常有4类基本数据结构: (1) 集合(Set):如图1.1(a)所示,该结构中的数据元素除了存在“同属于一个集 合”的关系外,不存在任何其它关系。 (2) 线性结构(Linear Structure):如图1.1(b)所示,该结构中的数据元素存在着一 对一的关系。 (3) 树形结构(Tree Structure):如图1.1(c)所示,该结构中的数据元素存在着一对 多的关系。 (4) 图状结构(Graphic Structure):如图1.1(d)所示,该结构中的数据元素存在着 多对多的关系。 (a) 集合 (b) 线性结构 (c) 树形结构 (d)图状结构 图 1.1 4 类基本数据结构关系图 由于集合中的元素的关系极为松散,可用其它数据结构来表示,所以本书不 做专门介绍。关于集合的概念在1.3.1小节中有介绍。 数据结构的形式化定义为: 数据结构(C#语言版) 1.1 数据结构3 数据结构(Data Structure)简记为DS,是一个二元组, DS = (D,R) 其中:D是数据元素的有限集合, R是数据元素之间关系的有限集合。 下面通过例题来进一步理解后3类数据结构。 【例1-1】 学生信息表(如表1.1所示.)是一个线性的数据结构,表中的每 一行是一个记录(在数据库信息处理系统中,表中的一个数据元素称为一个记 录)。一条记录由学号、姓名、行政班级、性别和出生年月等数据项组成。表中 数据元素之间的关系是一对一的关系。 表 1.1 学生信息表 学号 姓名 行政班级 性别 出生年月 040303001 雷洪 软件04103 男 1986.12 040303002 李春 软件04103 女 1987.3 040303003 周刚 软件04103 男 1986.9 【例1-2】 家族关系是典型的树形结构,图1.2是一个三代的家族关系。在 图中,爷爷、儿子、女儿、孙子、孙女或外孙女是一个结点(在树形结构中,数 据元素称为结点),他们之间是一对多的关系。其中,爷爷有两个儿子和一个女 儿,这是一对三的关系;一个儿子有两个儿子(爷爷的孙子),这是一对二的关 系;另一个儿子有一个儿子(爷爷的孙子)和一个女儿(爷爷的孙女),这是一 对二的关系;女儿有三个女儿(爷爷的外孙女),这是一对三的关系。树形结构 具有严格的层次关系,爷爷在树形结构的最上层,中间层是儿子和女儿,最下层 是孙子、孙女和外孙女。不能把这种关系倒过来,因为绝对不会先有儿子或女儿 再有爷爷,也不会先有孙子或孙女再有儿子、先有外孙女再有女儿。 外孙女 爷爷 儿子 儿子 女儿 孙子 孙子 孙子 孙女 外孙女 外孙女 图 1.2 家族关系图 【例1-3】 图1.3是四个城市的公路交通图,这是一个典型的图状结构。在 图中,每个城市是一个顶点(在图状结构中,数据元素称为顶点),它们之间是 多对多的关系。成都与都江堰、雅安直接通公路,都江堰与成都、青城山直接通 公路,青城山与都江堰、成都及雅安直接通公路,雅安与成都、青城山直接通公 路。这些公路构成了一个公路交通网,所以,又把图状结构称为网状结构(Network Structure) 数据结构(C#语言版) 1.2 算法4 成都 都江堰 青城山 雅安 图 1.3 四城市交通图 从数据类型和数据结构的概念可知,二者的关系非常密切。数据类型可以看 作是简单的数据结构。数据的取值范围可以看作是数据元素的有限集合,而对数 据进行操作的集合可以看作是数据元素之间关系的集合。 数据结构包括数据的逻辑结构和物理结构。上述数据结构的定义就是数据的 逻辑结构(Logic Structure),数据的逻辑结构是从具体问题抽象出来的数学模型, 是为了讨论问题的方便,与数据在计算机中的具体存储没有关系。然而,我们讨 论数据结构的目的是为了在计算机中实现对它的操作,因此还需要研究在计算机 中如何表示和存储数据结构,即数据的物理结构(Physical Structure)。数据的物理 结构又称为存储结构(Storage Structure),是数据在计算机中的表示(又叫映像) 和存储,包括数据元素的表示和存储以及数据元素之间关系的表示和存储。 数据的存储结构包括顺序存储结构和链式存储结构两种。顺序存储结构 (Sequence Storage Structure)是通过数据元素在计算机存储器中的相对位置来表 示出数据元素的逻辑关系,一般把逻辑上相邻的数据元素存储在物理位置相邻的 存储单元中。在C#语言中用数组来实现顺序存储结构。因为数组所分配的存储 空间是连续的,所以数组天生就具有实现数据顺序存储结构的能力。链式存储结 构(Linked Storage Structure)对逻辑上相邻的数据元素不要求其存储位置必须相 邻。链式存储结构中的数据元素称为结点(Node),在结点中附设地址域(Address Domain)来存储与该结点相邻的结点的地址来实现结点间的逻辑关系。这个地址 称为引用(Reference),这个地址域称为引用域(Reference Domain)。 从20世纪60年代末到70年代初,出现了大型程序,软件也相对独立,人 们越来越重视数据结构,认为程序设计的实质是确定数据结构,加上设计一个好 的算法,这就是人们常说的“程序=数据结构+算法”。下一节谈谈算法的问题。 1.2 算法 从上节我们知道,算法与数据结构和程序的关系非常密切。进行程序设计时, 先确定相应的数据结构,然后再根据数据结构和问题的需要设计相应的算法。由 于篇幅所限,下面只从算法的特性、算法的评价标准和算法的时间复杂度等三个 方面进行介绍。 1.2.1 算法的特性 算法(Algorithm)是对某一特定类型的问题的求解步骤的一种描述,是指令的 有限序列。其中的每条指令表示一个或多个操作。一个算法应该具备以下5个特 性: 1、有穷性(Finity):一个算法总是在执行有穷步之后结束,即算法的执行时间是 有限的。 2、确定性(Unambiguousness):算法的每一个步骤都必须有确切的含义,即无二 义,并且对于相同的输入只能有相同的输出。 3、输入(Input):一个算法具有零个或多个输入。它即是在算法开始之前给出的 数据结构(C#语言版) 1.2 算法5 量。这些输入是某数据结构中的数据对象。 4、 输出(Output):一个算法具有一个或多个输出,并且这些输出与输入之间存 在着某种特定的关系。 5、 能行性(realizability):算法中的每一步都可以通过已经实现的基本运算的有 限次运行来实现。 算法的含义与程序非常相似,但二者有区别。一个程序不一定满足有穷性。 例如操作系统,只要整个系统不遭破坏,它将永远不会停止。还有,一个程序只 能用计算机语言来描述,也就是说,程序中的指令必须是机器可执行的,而算法 不一定用计算机语言来描述,自然语言、框图、伪代码都可以描述算法。 在本书中我们尽可能采用C#语言来描述和实现算法,使读者能够阅读或上 机执行,以便更好地理解算法。 1.2.2 算法的评价标准 对于一个特定的问题,采用的数据结构不同,其设计的算法一般也不同,即 使在同一种数据结构下,也可以采用不同的算法。那么,对于解决同一问题的不 同算法,选择哪一种算法比较合适,以及如何对现有的算法进行改进,从而设计 出更适合于数据结构的算法,这就是算法评价的问题。评价一个算法优劣的主要 标准如下: 1、正确性(Correctness)。算法的执行结果应当满足预先规定的功能和性能的要求, 这是评价一个算法的最重要也是最基本的标准。算法的正确性还包括对于输入、 输出处理的明确而无歧义的描述。 2、可读性(Readability)。算法主要是为了人阅读和交流,其次才是机器的执行。 所以,一个算法应当思路清晰、层次分明、简单明了、易读易懂。即使算法已转 变成机器可执行的程序,也需要考虑人能较好地阅读理解。同时,一个可读性强 的算法也有助于对算法中隐藏错误的排除和算法的移植。 3、健壮性(Robustness)。一个算法应该具有很强的容错能力,当输入不合法的数 据时,算法应当能做适当的处理,使得不至于引起严重的后果。健壮性要求表明 算法要全面细致地考虑所有可能出现的边界情况和异常情况,并对这些边界情况 和异常情况做出妥善的处理,尽可能使算法没有意外的情况发生。 4、运行时间(Running Time)。运行时间是指算法在计算机上运行所花费的时间, 它等于算法中每条语句执行时间的总和。对于同一个问题如果有多个算法可供选 择,应尽可能选择执行时间短的算法。一般来说,执行时间越短,性能越好。 5、占用空间(Storage Space)。占用空间是指算法在计算机上存储所占用的存储空 间,包括存储算法本身所占用的存储空间、算法的输入及输出数据所占用的存储 空间和算法在运行过程中临时占用的存储空间。算法占用的存储空间是指算法执 行过程中所需要的最大存储空间,对于一个问题如果有多个算法可供选择,应尽 可能选择存储量需求低的算法。实际上,算法的时间效率和空间效率经常是一对 矛盾,相互抵触。我们要根据问题的实际需要进行灵活的处理,有时需要牺牲空 间来换取时间,有时需要牺牲时间来换取空间。 通常把算法在运行过程中临时占用的存储空间的大小叫算法的空间复杂度 (Space Complexity)。算法的空间复杂度比较容易计算,它主要包括局部变量所占 用的存储空间和系统为实现递归所使用的堆栈占用的存储空间。 如果算法是用计算机语言来描述的,还要看程序代码量的大小。对于同一个 问题,在用上面5条标准评价的结果相同的情况下,代码量越少越好。实际上, 代码量越大,占用的存储空间会越多,程序的运行时间也可能越长,出错的可能 数据结构(C#语言版) 1.2 算法6 性也越大,阅读起来也越麻烦。 在以上标准中,本书主要考虑程序的运行时间,也考虑执行程序所占用的空 间。影响程序运行时间的因素很多,包括算法本身、输入的数据以及运行程序的 计算机系统等。计算机的性能由以下因素决定: 1、硬件条件。包括所使用的处理器的类型和速度(比如,使用双核处理器还是 单核处理器)、可使用的内存(缓存和RAM)以及可使用的外存等。 2、实现算法所使用的计算机语言。实现算法的语言级别越高,其执行效率相对 越低。 3、所使用的语言的编译器/解释器。一般而言,编译的执行效率高于解释,但解 释具有更大的灵活性。 4、所使用的操作系统软件。操作系统的功能主要是管理计算机系统的软件和硬 件资源,为计算机用户方便使用计算机提供一个接口。各种语言处理程序如编译 程序、解释程序等和应用程序都在操作系统的控制下运行。 1.2.3 算法的时间复杂度 一个算法的时间复杂度(Time Complexity)是指该算法的运行时间与问题规 模的对应关系。一个算法是由控制结构和原操作构成的,其执行的时间取决于二 者的综合效果。为了便于比较同一问题的不同算法,通常把算法中基本操作重复 执行的次数(频度)作为算法的时间复杂度。算法中的基本操作一般是指算法中 最深层循环内的语句,因此,算法中基本操作语句的频度是问题规模n的某个函 数f(n),记作:T(n)=O(f(n))。其中“O”表示随问题规模n的增大,算法执行时 间的增长率和f(n)的增长率相同,或者说,用“O”符号表示数量级的概念。例 如,如 )1n(n 2 1 )n(T −= ,则 )1n(n 2 1 −的数量级与n2 相同,所以T(n)=O(n2 )。
基础的重要性(程序员之路) 学习编程有几年了,感觉走了不少弯路,而不少的学弟学妹又在重蹈我当初的覆辙,不免有些痛心。最近在网 上也看了许多前辈们的经验建议,再结合自己的学习经历在这里谈谈基础的重要性,希望帮助大家少走些弯 路。 什么是基础呢?就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理 等课程学好,对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能等要有深层次的掌握。 初学者可能体会不到这些基础的重要性,学习jsp,donet,mfc,vb的朋友甚至会对这些嗤之以鼻,但是一开始没学 好基础就去学jsp或donet会产生很坏的影响,而且陷入其中不能自拔。 我上大二的时候还对编程没什么概念,就上了门C++也不知道能干什么,老师说MFC也不知道是什么东西, 看别的同学在学asp.net就跟着学了,然后就了解到.net,j2ee,php是什么了,就觉得软件开发就是用这些了,而上 的那些专业课又与我们学的sqlserver啊,css啊,ajax啊,毫无关系,就感慨啊,还不如回家自学去就为一个文凭吗? 还不如去培训,浪费这么多钱.于是天天基本上没去上什么课,天天就在做网站,几个学期就做了三个网站。感觉做 这些网站就是学到些技巧,没什么进步,这些技巧就好比别人的名字,告诉你你就知道了,网上也都可以搜到。那时 候就觉得把.net学好就行了,搞j2ee的比较难,搞api编程就别想了,操作系统更是望尘莫及了。后来随着学习 的深入和看了网上许多前辈们的建议才对这些基础的重要性有所体会。 虽然.net或java的开发并不直接用到汇编,操作系统这些,但是不掌握这些基础是有很大问题的,因为你只知 其然不知其所有然,在mfc和.net里面控件一拖什么都做好了,很方便,但是出了问题可能就解决不了,有些在 网上搜都搜不到。这就是基础没打好,不知道它的原理就不知道出错的原因。在学.net的时候常会讨论那些控件 该不该用别人说尽量别用也不知道为什么?不让用是因为你在高层开发,你不知道它的原理出错了你可能解决不 了,但其实是应该用的,不然人家开发它干嘛,但要在了解它的原理后去用就会很方便。 要编写出优秀的代码同样要扎实的基础,如果数据结构和算法学的不好,怎么对程序的性能进行优化,怎样 从类库中选择合适的数据结构。如果不了解操作系统,怎样能了解这些开发工具的原理,它们都是基于操作系统 的。不了解汇编,编译原理,怎么知道程序运行时要多长时间要多少内存,就不能编出高效的代码。 如果没有学好基础一开始就去学.net,java这些越往后就会觉得越吃力,它们涉及的技术太多了,而且不但 在更新,对于三层啊,mvc,orm这些架构,你只会用也不明白为什么用,就感觉心里虚,感觉没学好。而你把 面向对象,软件工程,设计模式这些基础学好了再去看这些就可以一不变应万变。 大家不要被新名词、新技术所迷惑.NET、XML等等技术固然诱人,可是如果自己的基础不扎实,就像是在 云里雾里行走一样,只能看到眼前,不能看到更远的地方。这些新鲜的技术掩盖了许多底层的原理,要想真正 的学习技术还是走下云端,扎扎实实的把基础知识学好,有了这些基础,要掌握那些新技术也就很容易了。 开始编程应该先学C/C++,系统api编程,因为它们更接近底层,学习他们更能搞清楚原理。学好了c/C++ 编程和基础,再去学习mfc,.net这些就会比较轻松,而且很踏实。假设学习VB编程需要4个月,学习基础课程和 VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习 后者,再来学VB,也许你只需要1个星期就能学得非常熟练。 bbs.
对数据库系统的认识 这学期我们开了数据库系统这门课,开课近五周的时间,虽然只学习到第二章,但 是从绪论中我就已经感受到了数据库的强大,有关数据库的内容老师也给我们讲解了很 多,接下来我想来谈谈我对数据库的认识,还望老师批评指正。 我们都知道数据库是数据管理的最新技术,是计算机科学的重要分支。而且对于一个国家 来说,数据库的建模,数据库信息量的大小和使用频度的已成为衡量这个国家信息化程 度的高低的重要标志。所以,数据库系统这门2课时及其重要的,学好它很必要。 数据库最常用的术语有数据(Data)、数据库(DB)、数据库管理系统(DBMS)、数据 库系统(DBS)等,以下是我对它们的理解: 数据(Data):数据是数据库中存储的基本对象。数据的种类很多,文字,图形,图 像,声音,学生的档案记录,货物的运输情况等,这些都是数据。可以对数据做如下定 义:描述事物的符号记录称为数据; 数据库(DB):数据库,顾名思义,是存放数据的仓库。只不过这个仓库是在计算机 存储设备上,而且数据是按一定的格式存放的。所谓数据库是指长期存储在计算机内的 ,有组织的,可共享的数据集合; 数据库管理系统(DBMS):数据库管理系统是位于用户与操作系统之间的一层数据 管理软件。它的主要功能包括:数据定义功能,数据操纵功能,数据库的运行管理,数 据库的建立和维护功能等; 数据库系统(DBS):数据库系统是指在计算机系统中引入数据库后的系统,一般由 数据库,数据库管理系统,应用系统,数据库管理原和用户构成。 数据库管理技术的产生和发展共经历了三个阶段:人工管理阶段(20世纪50年代中 期以前),文件系统阶段(20世纪50年代后期到60年代中期),数据库系统阶段(20世 纪60年代后期以后)。其特点经历了从数据不能保存,不能共享,不具有独立性,到数 据结构化,共享性高,冗余度低,易扩充,独立性高,由DBMS统一管理和控制的逐步优 化。 数据模型分为两类,一类是概念模型,主要用于数据库设计,一类是逻辑模型和物 理模型,主要用于DBMS的实现。数据模型通常由数据结构、数据操作和完整性约束三部 分组成。 数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级组成, 数据库管理系统在这三级模式之间还提供了两层映像,这样的系统结构保证了数据库系 统中能够具有较高的逻辑独立性和物理独立性。 通过对这些内容的学习,我深刻认识到作为一名计算机专业的学生学好这门课的重 要性与必要性,在接下来的学习中,更会严格要求自己,紧跟老师步伐,下课多加复习 ,遇到不懂的问题将会及时查阅资料或者向老师同学请教。 ----------------------- 对数据库系统的认识全文共2页,当前为第1页。 对数据库系统的认识全文共2页,当前为第2页。
商业银行信贷管理系统的数据库设计要点 [摘 要] 信贷管理系统的数据库设计是信贷管理系统建设的重点之一,直接关系到应用系统的架构 、性能、安全等。本文将从系统的业务功能、性能需求方面结合3年来信贷管理系统实施 中数据库的改进经验,对信贷管理系统数据库的设计要点做了较详细的分析,并提供了相 应的解决方案。 [关键词] 银行信贷管理系统;信贷;数据库;设计;性能;安全 一、引言 信贷管理系统是银行对其资产信贷业务进行全面的信息化管理系统,它包括客户信息 管理、评级授信管理、信贷审批管理、贷后监管与预警、五级风险分类管理、低质押物 管理、不良资产管理、业务分析等方面的管理。信贷管理系统的目的是控制和降低信贷 风险,降低管理成本,提供方便快捷的信贷服务,提供决策支持,其中控制和降低信贷风险 是其根本目的。 信贷管理系统是一个庞大而复杂的管理系统,对各个方面的要求十分严格,如系统性能 、安全性等。数据库是整个信贷管理系统的核心,它存放的是银行的所有客户资料数据和 贷款账户数据,其安全性十分重要;由于信贷管理系统的在线用户数量大,数据的存取频繁 、查询统计复杂多样,对数据库的存取性能要求很高。 下面就从业务功能方面谈谈构建信贷管理系统数据库的几个设计要点。本文所引用的 数据库模型是笔者全程参与设计和修改维护的一个信贷管理系统的后台数据库,经历了3 个省级商业银行的成功实施,历时3年,几经修改。 二、设计原则 (1) 规范性。在设计和操作维护数据库时,关键的步骤就是要确保数据正确地分布到数据库的 表中。使用正确的数据结构,不仅便于对数据库进行相应的存取操作,而且可以极大地简 化应用程序的其他内容,如查询、页面、报表、代码等。 (2) 正确性。数据库要能正确地描述信贷业务的信息、过程、关系,错误的信息描述将会带来 不可预知的问题,所以,在设计表时,要多与银行信贷业务人员、管理人员、高层领导沟通 ,从多个角度正确理解业务对象的信息内容、用途和关系,宁缺毋滥。 (3) 安全性。信贷管理系统的各个层面都要求有安全性保障,有应用程序层面的、操作系统层 面的、数据库层面的等。而对于绕过应用程序和操作系统直接进入数据库的操作,则更具 危险性,所以,数据库在设计和部署时要求有防篡改的手段或辅助的设计。 (4) 性能优先。数据库的设计要考虑数据存取的性能需求,例如,可以不按范式规范数据表,适 度的分表或分区设计等。 (5) 前瞻性。对一些可能需要扩充的功能模块或变化性比较大的功能模块,可以适当加入一些 前瞻性的设计或冗余设计。 三、设计要点 1. 整体规划 首先,在整体上收集和归纳信贷管理系统所涉及的业务对象的主要信息、用途、特点 和关系,然后,结合数据表的功能用途和存取特点进行分类,主要分类如下: (1) 组织人员权限(基础数据):主要是描述银行各组织机构、员工信息以及整个系统的访问控 制信息。 (2) 静态数据:静态数据包括两大类,即系统静态数据和业务静态数据,例如码表,以及业务类 型、贷款方式、担保方式、利率期限等业务参数。 (3) 客户基本信息:包括全部的企业客户和个人客户的档案信息,以及客户的联保小组、关联 企业、黑名单、白名单、财务报表、资产信息、不良记录等的信息。 (4) 评级授信:包括客户评级和授信的相关信息,主要有客户评级表、个人评分项目表、企业 定量评分表、企业定性评分表、客户授信记录表、按业务种类授信表、按贷款方式授信 表等。 (5) 模型数据:信贷管理系统中,用到的所有模型定义,主要有个人评级模型、企业定量评级模 型、企业定性评级模型、业务审批流程、风险分类模型、各类财务分析指标等。 (6) 业务数据:这是本系统的核心数据,包括科目、账号、借据、余额表、月末余额表、流水 表、月末欠息表、欠息表、利率表,此外还包括贷款合同、低质押物、担保人等表。 (7) 业务处理数据:业务处理数据是指业务处理过程中所产生的数据,主要是业务流程运行时 的过程数据,评级授信、信贷业务审批等业务流程的各个步骤及其相关的数据,待办事宜 等。 (8) 风险管理数据:主要包括五级分类、贷后监管、风险预警等方面的数据或信息。 (9) 日志:需要存储到数据库中的一些系统日志和业务日志数据。 2. 组织机构、人员与权限 组织机构、人员与权限系统被设计成一个独立的子系统,直接对应应用程序的机构人 员管理和权限管理认证模块,实际上在数据库中该部分数据也只是提供机构ID、人员ID的 外键关联或引用,见图1。 这一部分的应用程序和数据库设计成独立模块的一个主要考虑就是银行系统的应用整 合,如果整合,这一部分可直接用相应的模块替换或同步即可。 组织机构表的设计十分重要,除了正确描述机构间的从属关系外,最主要的是提高查询 性能,信贷管理系统中几乎所业的业务数据都与机构关联,而很多的

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值