第一篇:数据库系统开发总结
数据库系统开发课程指导思想:
1.掌握SQL的基本语法,重视SQL语言的基本编程
2.针对数据库应用项目编程,从总体功能出发进行系统功能设计和数据库设计,在设计的基础上,灵活编程和调试程序,做好调试记录。
本学期所学内容要点:
第一章
数据库有关的基本概念、、DBMS的功能、E-R模型、SQL SERVER的体系结构
第二章
SQL SERVER 的系统数据库、重要的系统表、主要的工具
第三章
T-SQL 语言---语法、常用函数
第四章
创建、修改数据库
第五章
1.创建与管理表
2.数据的查询---与第七章结合3.增、删、改
第六章
1.创建与管理视图
2.创建索引
3.存储过程的设计、触发器的设计
4.游标
第七章 查询
第八章
数据保护
1.安全性
2.完整性
3.数据库的回复
第九章
数据库系统的设计
第二篇:系统开发总结
课程综合论文系统开发总结
经过了两个月紧张而有序的系统开发,收获颇丰,感触颇深。现下分经验收获、教训反思、下步设想三大部分总结如下:
一、经验收获
1.编写程序前,对已完成设计构思的系统进行主次分析,排好功能实现顺序,列出程序编写步骤,对于理清编程思路很有帮助。人的逻辑思维可能很发达,在设计当中可以不用笔记,在脑中就能想好三到五个功能的逻辑关系和编写步骤。然而我们面对的是一个庞大的系统,大系统下分多个子系统,子系统下分多个功能模块,功能模块下分多个功能页面,功能页面下分多个子功能,而且子系统、功能模块、功能页面、子功能之间的逻辑关系构成了一张复杂庞大的逻辑关系网。这就需要我们在原先做好设计流程图上,系统规划,全面分析,逐步细化、反复斟酌、推敲,然后列出编程计划。
2.善于借鉴他人的成果,实现自己的功能,可以有效地缩短开发时间,提高工作效率,是快速提高编程能力的最佳途径。借鉴他人的劳动成果并不是简单地拷贝别人的源代码,如果只是这样的话,你会因为系统经常的报错,却束手无策,最后将其认为是鸡肋而抱怨连天。应该是先要分析读透他人的程序思想,取其精华,去其糟粕,使之成为自己的思想,然后将这些功能块与自己的功能块融合。比如在短消息功能模块中,如果只是单凭自己凝思构想的话,可能也会设计得很好,但是在一两个星期内完成是不可能的。后来发现了《自动化办公系统》有相同的功能模块,开始只是简单代码拷贝、粘贴,结果可想而知,出现了一大堆的错误。后来只好深入解读其编程思路,先是了解其数据库相关表的关系和作用,根据数据预测各个字段的用途以及之间的数据关系,然后理解每个代码块的功能和之间的相互关系,最后自己又认真敲打了一遍。经过这么一个完整的过程,对于程序编写时在规范性,安全性,高效性上的要求和运用有了进一步的理解。这对于我一个编程新手来说是有很大的裨益的。
3.及时、清楚、完整的工作日志,有利于快速提高自身的业务水平,也有利于提高编程效率。工作日志是指将工作中出现的事件按照一定的顺序记录下来。写工作日志就像是记录流水帐似的填写事件的相关要素,看似简单的工作记录却蕴含着很深的学问,工作日志需要包含哪些要素才能记录完整、一目了然的事件?日志要如何记录、分门别类才能更有利于以后我们的在学习?我是这样做的,以一天为工作节点,睡觉之前回忆今天所完成的任务,遇到什么困难,怎样解决,自己有什么心得体会,以表格形式,字段要素依次为:时间、事件、重点难点、解决死路、心得体会,把事件相对完整地记录下来,还可以按照时间、困难等级和心得体会来分类,以方便以后查阅学习。
4.每编完一个功能,应及时与其它完成功能一起测试,运行无误后,方可进行下一步开发。这样做是为了在测试时如果出错能很方便地找到出错的环节和病因所在,我们称之为“step by step”(一步一脚印),对于一个初级的程序开发者来说是很有帮助的。对于编程人员来说每一个环节都是来不得有半点差错的,每一个功能都是环环相扣,相互关联,相互作用的。如果一环出错,将会对系统造成不可估计的影响,最可怕的危害是它有可能会成为系统的一个隐形的漏洞或是黑客工具的后门。
二、教训反思
1.学习与实践的结合不当。当我进行程序开发的时候,发现以前学习的知识点到用时却忘得一干二净了,也只好重新学习基本知识了。如果以前把知识学得透彻点,理解深刻点,也许在开发过程中可以缩短时间,提高效率。反思自我,归其原因:不是当时的学习不够认真,而是缺乏对知识点的运用实践;对于像我这样“半路出家”的编程人员来说,只是理解知识点是远远不够的,如果当时没有经过编译、运行、调试的过程,很快就会忘记的。
2.学习目标不专一。我们都知道在学习的时候是最忌讳这个还没学明白就去学那个的,结果当然是哪个也没学明白。VS.NET中微软本身就提供了有很多的控件,再加上它支持第三方提供的控件,这么多的控件各有各的特性,要想运用这些控件就必须了解它提供的接口和性质。由于多数是免费的控件,在控件介绍上就比较模糊或者根本就没有,在学习上造成很大的阻碍。这个没学好,就想用另一个,造成学习不深入,学习效果不好。
三、下步设想
1.文章的类型应该有动态添加功能。论文分为“学员论文”、“示范论文”、“论文题目”三大类,只是从整体上粗糙地进行分类,不利于学员的人性化学习。我们还可以从论文的研究方向、深度、等级等进行细化分类的。研究方向可以分为:军事理论、情报分析、心理学、教育学、管理学、计算机等;性质可以分为:课程论文、毕业论文、学术论文等;等级可以分为:一、二、三或优、良、中、一般、差等。细化分类后的文章更有利于学员的阅读学习,学员可以根据论文的研究方向进行搜索相同方向的学习,也可以根据论文的性质进行学习,还可以把自己的论文与不同等级的论文进行对比,找出自己的差距和不足,有效地提高学习效率。
2.利用XML,减少数据库的负担,提高系统的整体效率。根据XML是一种数据流不同验证就可以直接通过防火墙,高效的数据传输可以有效地在胖客户端快速显示几千字甚至上万字的文章。一篇文章所占的空间并不大,最多也是几百KB,但是资源一多,文章的数量很有可能超过几百万篇,至少占几个G的资源,而一般来说数据库要运行这么大的数据是很困难的。
3.增加RSS阅读器,将最新的文章提供给其它的网站。这样可以增强本网站与其它网站的联系性,也可以在网络的无限空间里有效地推广我们的网站。
第三篇:测绘2010,地信2010测绘专业(数据库系统开发实验)
测绘2010-4,地理信息2010-1,2班题目
利用数据库把各个宿舍的书籍管理起来
测绘2010-1,2,3班题目
利用数据库把各个宿舍的每学期考试成绩及相关管理起来
数据库实验-小型图书管理系统
实验目的采用C/S模式完成一个小型的图书管理系统;完成从需求分析、数据模式设计到编码实现、系统调试的所有流程;通过此一图书管理系统的实现,在实践中掌握数据库系统设计的特点、方法和步骤。
实验环境
SQL Server 2000 +Visual Basic
5人组成一组,共同开发完成;
问题及算法描述
完成一个小型图书管理系统,功能要求如下:
假定需要保存“图书”,“读者”,“借阅”和'作者'信息以及他们之间的关系。
1)图书基本信息(图书编号、书名、类别、出版社、出版日期、作者、内容摘要,存放地点,数量)
2)读者基本信息(读者编号、读者名称、性别、读者类别、工作单位、家庭住址、联系电话)
3)借阅基本信息(借阅编号(自动编号)、读者编号、读者名称、图书编号、书名、出借日期、还书日期)
要求:
1)能对以上三个基本信息进行添加、修改和删除等操作。
2)能随时查阅图书的基本情况;
3)能随时查询读者的借阅情况;
4)能完成借书和还书的功能;
5)以上每项操作应打印出报表
提供的最后资料:
系统需求分析
系统设计(系统总体设计,数据库设计)
系统实施
运行结果
最后的程序
数据库实验-成绩管理系统
实验目的采用C/S模式完成一个小型的图书管理系统;完成从需求分析、数据模式设计到编码实现、系统调试的所有流程;通过此一成绩管理系统的实现,在实践中掌握数据库系统设计的特点、方法和步骤。
实验环境
SQL Server 2000 +Visual Basic
4人组成一组,共同开发完成;
问题及算法描述
完成一个成绩管理系统,功能要求如下:
假定需要保存“成绩”,“学生”,“班级”,“系表“,“课程表”,”课程类型“,”教师“信息以及他们之间的关系。
1)成绩基本信息(学号、课程编号、成绩)
2)学生基本信息(学号、姓名、所属班级、生日、性别、家庭住址、联系电话、简历)
3)班级基本信息(班级编号、班级名称、班级所属部门编号)
4)系基本信息(部门编号、部门名称)
5)课程基本信息(课程编号、课程姓名、课程学时数、课程类型号)
6)课程类型基本信息(类型编号、类型名称)
7)教师基本信息(教师编号、教师姓名、所属部门编号、学历、职称、生日、性别、家庭住址、电话、简历)
关系:
学生与成绩、成绩与课程、课程与课程类型、学生与班级、班级与系、教师与系 要求:
1)能对以上基本信息进行添加、修改、删除和查询等操作。
2)统计某一学生选课情况
3)统计某一学生成绩情况
4)统计某一门课选修情况
5)统计某系中的班级、学生、老师情况
6)以上每项操作应打印出报表
提供的最后作业资料:
系统需求分析
系统设计(系统总体设计,数据库设计)
系统实施
运行结果
最后的程序
实验报告封面
数据库系统开发实验
×××××系统开发实验报告
班级:
小组成员(姓名和学号): 组长:
年月日
第四篇:系统开发总结
宿舍管理信息系统
系统管理
指导老师(李政忙老师)
开发团队成员:
姓名: 杨正明
姓名: 胡友文
姓名: 赵 坤
姓名: 卓仁慧
姓名: 肖远林
姓名: 李茂良
姓名: 宋 洁
总结书写人:宋学号:学号:20094042073 学号:20094086066 学号:20094042044 学号: 20094082052 学号: 20094084012 学号:20094084032 学号:20094171085
洁
20094171085
系统开发总结
我们小组经过了这几个月的紧张而有序的系统开发,收获颇丰,感触颇深。现下分经验收获、教训反思、下步设想三大部分总结如下:
二、教训反思
1.学习与实践的结合不当。当我们进行程序开发的时候,发现以前学习的知识点到用时却忘得一干二净了,也只好重新学习基本知识了。如果以前把知识学得透彻点,理解深刻点,也许在开发过程中可以缩短时间,提高效率。反思自我,归其原因:不是当时的学习不够认真,而是缺乏对知识点的运用实践;对于像我们这样“半路出家”的编程人员来说,只是理解知识点是远远不够的,如果当时没有经过编译、运行、调试的过程,很快就会忘记的。
2.学习不精,对VFP的学习只是一些简单的肤浅的了解,导致我们在设计的时候,程序指令混乱,在设计的过程中遇到了很多的麻烦,最后还有很多都是借鉴的老师上课时候讲的,才得以完成。所以VFP没学好,也是我们的教训之一。
3.在做系统的时候,没有经常讨论,而是各自做各自的。没有沟通,导致我们再系统设计的时候的环节出现短时间的断裂,这是很不好的一点,以后一定要改正的。不然要是真正做系统的时候,会耽误很多东西。
二、经验收获 1.编写程序前,对已完成设计构思的系统进行主次分析,排好功能实现顺序,列出程序编写步骤,从系统规划对于理清编程思路很有帮助。人的逻辑思维可能很发达,在设计当中可以不用笔记,在脑中就能想好三到五个功能的逻辑关系和编写步骤。然而我们面对的是一个庞大的系统,大系统下分多个子系统,子系统下分多个功能模块,功能模块下分多个功能页面,功能页面下分多个子功能,而且子系统、功能模块、功能页面、子功能之间的逻辑关系构成了一张复杂庞大的逻辑关系网。这就需要我们在原先做好设计流程图上,系统规划,全面分析,逐步细化、反复斟酌、推敲,然后列出编程计划。
2.善于借鉴他人的成果,实现自己的功能,可以有效地缩短开发时间,提高工作效率,是快速提高编程能力的最佳途径。借鉴他人的劳动成果并不是简单地拷贝别人的源代码,如果只是这样的话,你会因为系统经常的报错,却束手无策,最后将其认为是鸡肋而抱怨连天。应该是先要分析读透他人的程序思想,取其精华,去其糟粕,使之成为自己的思想,然后将这些功能块与自己的功能块融合。如果其中有些内容只是单凭自己凝思构想的话,可能也会设计得很好,但是在 短时间内完成是不可能的。这次系统考试,开始只是简单代码拷贝、粘贴,结果可想而知,出现了一大堆的错误。后来只好深入解读其编程思路,先是了解其数据库相关表的关系和作用,根据数据预测各个字段的用途以及之间的数据关系,然后理解每个代码块的功能和之间的相互关系,最后自己又认真敲打了一遍。经过这么一个完整的过程,对于程序编写时在规范性,安全性,高效性上的要求和运用有了进一步的理解。这对于我们一个编程新手来说是有很大的好处的。
3.及时、清楚、完整的工作笔记,有利于快速提高自身的业务水平,也有利于提高编程效率。工作笔记是指将工作中出现的事件按照一定的顺序记录下来。写工作笔记就像是记录流水帐似的填写事件的相关要素,看似简单的工作记录却蕴含着很深的学问,工作笔记需要包含哪些要素才能记录完整、一目了然的事件?笔记要如何记录、分门别类才能更有利于以后我们的在学习?我是这样做的,以一天为工作节点,睡觉之前回忆今天所完成的任务,遇到什么困难,怎样解决,自己有什么心得体会,以表格形式,字段要素依次为:时间、事件、重点难点、解决死路、心得体会,把事件相对完整地记录下来,还可以按照时间、困难等级和心得体会来分类,以方便以后查阅学习。
4.每编完一个功能,应及时与其它完成功能一起测试,运行无误后,方可进行下一步开发。这样做是为了在测试时如果出错能很方便地找到出错的环节和病因所在,我们称之为“step by step”(一步一脚印),对于一个初级的程序开发者来说是很有帮助的。对于编程人员来说每一个环节都是来不得有半点差错的,每一个功能都是环环相扣,相互关联,相互作用的。如果一环出错,将会对系统造成不可估计的影响。
要完成一个优秀的系统,必须熟练掌握工具的特点及用法,要学会举一反三,充分实现VFP程序的灵活性。在平时的学习实践中,要不断开动脑筋,活学活用。要发扬团体合作的精神,互帮互助,共同进步。善于发问,善于思考。
第五篇:数据库总结
数据库老师画的重点
数据库:数据库是长期存储在计算机内、有组织、可共享的大数据集合。数据库操纵功能:查询select、插入insert、删除delete、修改update 数据库系统的特点:1数据结构化2数据的共享高,冗余度低,易扩充3数据独
立性高4数据由DBMS统一管理和控制
数据模型的组成要素:数据结构、数据操作、完整性约束 概念模型:要出大体,画图 信息世界中的基本概念————
1、实体:客观存在并可以相互区别的事物称为实体
2、属性:实体所具有的某一特性
3、码(key):唯一标识实体的属性集称为码
4、域(domain):域是一组具有相同数据类型的集合
5、实体型(entity type):具有相同属性的实体必然具有共同的特征和性质。用实体名
及属性名集合来抽象和刻画同类实体,称为实体型。
6、实体集(entity set):同一类型的实体的集合
7、联系:在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中
反应为实体(型)内部的联系和实体(型)之间的联系。实体内部的联系通常是指
组成实体的各属性之间的联系;实体之间的联系通常是指不同实体集之间的联系
最常用的数据模型:
1、层次模型(Hierarchical Model)
2、网状模型(Network Model)
3、关系模型(Relational Model)
4、面向对象模型(Object Oriented Model)
5、对象关系模型(Object Relational Model)其中层次模型和网状模型统称为格式化模型
数据库系统的三级模式结构:
1、模式(scheme):模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。他是数据库系统模式结构的中间层,既不设计涉及数据的物理存储细节和硬件环境,也与具体的应用程
序、所使用的应用开发工具及高级程序设计语言无关。
2、外模式(external schema):外模式也称为子模式(subschema)或用户模式,他是数
据库用户(包括应用程序员和最终用户)能看见和使用
的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
3、内模式(internal scheme):内模式也称存储模式(storage schema),一个数据库只有
一个内模式。他是数据库物理结构和存储方式的描述,是
数据在数据库内部的表达方式。数据库的二级映像功能与数据库独立性————
为了能够在系统内部实现这3个抽象层次的联系和转换,数据库管理系统在这三个模式之间提供了两层映像:
·外模式/模式 映像 ·模式/内模式 映像
正是这两层映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性 关系(relation):D1*D2*D3··*Dn的子集叫做在域D1、D2、D3···Dn上的关系,表示
为R(D1、D2、D3···Dn)
这里的的R表示关系的名字,n是关系的目或度(degree)关系中每个元素是关系中的元组,通常用t表示 当n=1时,称关系为单元关系(unary relation),或一元关系 当n=2时,称该关系为二元关系(binary relation)
关系是笛卡尔积的有限子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性(attribute)。n目关系必有n个属性。
若关系中的某一属性组的值能够唯一的标识一个元组,则称该属性组为候选码(candidate key)
若一个关系有多个候选码,则选定其中一个为主码(primary key)候选码的诸属性称为主属性(prime attribute)。不包含在任何候选码中的属性称为非主属性(non-prime attribute)或非码属性(non-key attribute)P46 没有搞明白干嘛使得!!!!!!!!!!!
关系的三类完整性约束:实体完整性、参照完整性、用户定义的完整性 实体完整性和参照完整性被称作关系的两个不变性
1、实体完整性(entity integrity):主码中的属性即主属性不能取空值
2、参照完整性(referential integrity):
若属性(或属性组)F是基本关系R的外码,它与基本关系S的的主码K相对应(基
本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
·或者取空值(F的每个属性值均为空值)·或者等于S中某个元组的主码值
SQL(Structured Query Language),即结构化查询语言,是关系数据库的标准语言。SQL 的特点:
1、综合统一
2、高度非过程化
3、面向集合的操作方式
4、以同一种语法结构提供多种使用方式
5、语言简洁、易学易用 SQL的动词:
数据查询:select 数据定义:create、drop、alter(房间)修改表
数据操纵:insert、update(家具)修改数据、delete 数据控制:grant、revoke
绘制ER图————
在ER图中有如下四个成分:
矩形框:表示实体,在框中记入实体名。菱形框:表示联系,在框中记入联系名。
椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下
划一下划线。
连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上
标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对
多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体
连线方向各写N,M。
基本表是本身独立存在的表,在SQL中一个关系就对应一个基本表。一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也可以放在存储文件中。存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构是任意的,对用户是透明的。
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表等同,用户可以在视图上再定义视图。
基本表的定义、删除与修改:
1、定义基本表:create table ***()
2、定义主键:Primary key == not null(中间不用连接符号)unique
3、定义外码的语句:foreign key(某个字段)references 某表(某字段)
4、定义主码语句:primary key(***,***)
5、修改基本表:alter table 某表名 add 列名<数据类型>[完整性约束]
drop <完整性约束名>(字段名)
alter column<列名><数据类型>
6、删除表:drop table 表名[restrict | cascade级联删除]
7、建立索引:create [unique] [clustered] index 索引名
on 表名(列名[asc | desc],······)·clustered 表示是聚簇索引
·unique表明此索引的每一个索引值只对应唯一的数据记录 ·用户可以在最经常查询的列上建立聚簇索引以提高查询效率 ·在一个基本表上只能建立一个聚簇索引
·建立局促索引后,更新该索引列上的数据时,往往导致表中记
录的物理顺序的额变更,代价较大,因此对于经常更新的列不
宜建立聚簇索引
8、删除索引:drop index <索引名>
上机的时候不太一样:drop index 表名。索引名字
9、数据的查询:
select [all | distinct] <目标列表达式>,······ from 表名或者视图名,··· where 条件表达式
group by 列名1 [having 条件表达式] order by 列名2 [asc | desc] ·如果有group by 子句,则结果按“列名1”的值进行分组,该属性列值相
等的元组为一个组。通常会在每组中作用聚集函数。如果group by 子句带
having短语,则只有满足指定条件的组才予以输出。
·如果有order by 子句,则结果表按“列名2”的值的升序或降序排序 ·select Sname Name,‘Year of Birth:’Birth,2013-Sage Birthday,lower
(Sdept)Department
from Student
lower表示小写
常用的查询条件————
比
较:大于、等于、小于、不等于(< >/!=)、大于/小于等于、不小于、不大于、not+上述比较运算符
确定范围:between and,not between and 确定集合:in,not in 字符匹配:like,not like 空
值:is null,is not null 多重条件(逻辑运算):and,or,not
例子————
·select Sname,Sage
from Student
where Sdept(not)in(‘cs’,‘ma’,‘is’)
字符匹配:[not] like ‘字符串’[escape‘换吗字符’] 百分号表示任意长度、下划线表
示任意单个字符 聚集函数————
count([distinct | all] *)
统计元组个数 count([distinct| all] 列名)
统计一列中值的个数 sum([distinct| all] 列名)
计算一列值的总和(此列必须是数值型)avg([distinct| all] 列名)
计算一列的平局值(此列必须是数值型)max([distinct| all] 列名)
求一列中的最大值 min ·如果指定distinct短语,则表示在计算时要取消指定列中的重复值。如果不指定distinct
短语或者指定all短语(all为缺省值),则表示不取消重复。
·注意在聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值。·注意where子句中不能用聚集函数作为条件表达式
group by子句————
where 子句与having 短语的区别在于作用对象不同。Where 子句作用对象作用于基本表或试图,从中选择条件的元组。Having短语作用于组,从中选择满足条件的组。
例子:select Sno from SC
group by Sno having count(*)>3 查询了选修3门以上课程的学生学号 链接查询—————— 例子:
非自然链接
·select Student.*,SC.*
from Student,SC
Where Student.Sno=SC.Sno
自然链接
·select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade
from Student,SC
where Student.Sno=SC.Sno
自身链接
·select FIRST.Cno,SECOND.Cpno
from Course FIRST,Course SECOND
where FIRST.Cpno=SECOND.Cpno
外连接
·select Student.Sno,Sname,Sage,Sdept,Cno,Grade
from Student left outer join SC
on Student.Sno=SC.Sno ·左外链接列出左边关系中所有的元组,右外连接列出右边关系中的所有元组
嵌套查询
·select Sname from Student
where Sno in(select Sno from SC where Cno=‘2’)
·找出每个学生超过他选修课程平均成绩的课程号
Select Sno,Cno From SC x Where Grade >=(select avg(Grade)
From SC y Where y.Sno=x.Sno)
授权————
Grant 权限,····· On 对象类型 对象名,····· To 用户,·····
[with grant option]只一句表示权限的传递
例子: ·Grant all privileges
On Student,Course
To U1,U2
·grant update(Sno),select
on Student
to u4
·revoke update(Sno)
on table Student
from u4
一个满足BCNF的关系模式有:
·所有非主属性对每一个码都是完全函数依赖
3NF 编辑
3NF,即第三范式是要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。满足第三范式(3NF)必须先满足第二范式(2NF)
2NF(第二范式)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个惟一属性列被称为主关键字或主键、主码。