将工程经验融入数据库应用技术教学

2018-02-01 06:32
中国现代教育装备 2018年1期
关键词:字段字典范式

朱 峰

上海城建职业学院机电工程与信息学院 上海 200438

数据库应用技术课程处于计算机及专业课程体系的核心位置,与C#语言、Web程序设计、PhP程序设计、软件工程等课程有着承上启下的关系,是一门理论与实践紧密结合的课程。学习数据库课程的目的是使学生理解数据库的基本原理,能够独立或配合团队进行数据库系统的设计和开发,从而掌握如何在实际的项目中使用数据库技术[1]。

目前,我校开设的数据库应用技术课程,虽然也是以实践为主,但是数据库知识在实践中的设置往往比较零散、孤立,没有形成一个完整的实践体系。学生只是掌握了各章的知识点,但对数据库系统的全局建立不起完整的概念,以至于学生往往学完了数据库,仍然不知道数据库是什么[2],以及如何在具体的项目中使用数据库。此外,目前大部分数据库教学的知识点仍是以教学案例为主,这和实际的工程开发脱节。笔者经过半年的全脱产企业实践,跟踪公司实际项目开发,总结了如何在数据库应用技术的教学中将工程经验和教学经验相结合,以便既能完成教学目标又能让学生了解实际的项目开发经验,从而使学生更快地融入社会工作,笔者将工程经验应用在教学中的具体措施总结如下。

1 强调需求分析的重要性

教学中非常容易忽视需求分析,因为教学所用的案例一般都不是很复杂,看起来好像没有强调需求分析的必要性,但在实际的开发中如果不进行需求分析直接设计数据库表,那么这个表极有可能就不是最优化的。进行需求分析首先要了解系统中所要存储的数据是哪些;其次要了解数据的存储特点,如哪些数据是有实效性的,哪些是没有实效性的,有实效性的数据可以采取过期清理或更改的方式,还有一些增长量很大但不是核心数据的数据,则可采用分库分表的方式进行存储,并定义好数据的归档和清理规则,而教学案例受教学数据量比较小的限制并不会涉及这些问题。

2 强调数据库设计中ER图及标准文档的规范制作

ER图实际上是将需求分析的结果做出逻辑模型的展示方式,在数据库设计的教学中经常会详细讲解第一范式、第二范式、第三范式以及BC范式,当然还有第四、第五范式,但在实际的开发经验中重点放到前三个范式上,这是目前大多数数据库设计所要遵循的开发范式,这样在教学中可以有的放矢,更有重点地进行练习。

3 强调命名规范

良好规范的命名可以使开发人员的程序更具有易读性,如数据库的库名、表名及字段名使用大写和小写格式化对象名称可以获得良好的可读性。例如:使用CustAddress而不是custaddress提高可读性,同时对象的名字应该能够描述它所标识的对象。表的名称应该能够体现表中存储的数据内容,存储过程名称应该能够体现存储过程的功能,还要尽可能少使用或不使用缩写。

4 字段类型的选择有原则

在实际项目开发中,字段类型的选择与教材上的一致性原则有所偏差,往往一个字段是可以在多个数据类型中进行选择,需要考虑对数据进行的操作(查询条件、join条件及排序),同样的数据,字符处理比数字处理慢;在数据库中,数据处理以页为单位,列的长度越小,越利于性能提升。例如,教材中对“出生日期”这个字段默认都是datetime类型,但在实际应用中如果该字段不会频繁作为查询字段,则考虑将其定义成int类型,这样存储的字符长度比datetime小。

5 建表时对外键约束不做要求 对主键使用业务主键不使用触发器

数据库的定义中有逻辑主键和业务主键之分,一般在教材中都是采用逻辑主键作为主键进行讲解,如学生表中的学号、订单表中的订单号、员工表中的员工号,而业务主键是用来标识业务数据,进行表与表之间的关联。数据库主键是为了优化数据库的存储,一般实际应用中数据库表的主键是要顺序增长的,这样就不会进行数据的逻辑迁移,同时数据库表的主键要尽可能地小,这样对IO的性能很有好处,所以多数情况下工程项目中会将业务主键作为数据库表的真正主键。

在数据库教学中,都会强调外键是保持数据完整性的一个方式,但是在目前高并发的互联网络中,如果使用外键会带来一些负面影响,首先数据写入时,每导入一次数据都要去查询是否符合外键约束,如果符合才会插入数据,如果不符合就会被拒绝掉,那么这个检查符合外键约束的过程是非常耗时的,所以一般建议不要使用外键约束,但是可以在外键上建立外键索引。

使用触发器的目的是减少一些程序上的逻辑处理,如在操作一张表的同时需要记录日志,一般会使用触发器的方式向一张表中插入数据,但是如果大量使用触发器保证业务逻辑,当业务逻辑发生变更而其他开发人员不知触发器的情况下会出现意想不到的数据异常,并使业务逻辑变得更为复杂,所以在实际情况下要尽量避免或者不用触发器。

6 添加数据时强调TXT,Excel,CSV类型数据导入,得到一些企业可公开的一线数据作为教学案例数据

在数据库的教学中,教学案例设计的数据量都不会很大,并且数据相对比较“完美”,笔者称其为“教学数据”,但在实际的工程环境中,数据量一般很大,并且也不是一条一条手动添加,多是导入文件,这是非常实用的一个操作,所以考虑取得能够公开的企业数据作为教学数据,采用TXT,Excel,CSV等文件类型,大量练习导入导出操作,更加贴合实际的开发环境。

7 不使用预留字段

有一些开发人员喜欢使用预留字段,主要是为了增加程序的可扩展性,设想是如果在以后需要给该表增加一列,这样就不用再修改数据库的表结构,但在实际应用中往往无法准确知道预留字段的类型及存储内容,如果真的要增加一个字段还需要对数据库字段名称和类型进行修改,这样后期维护预留字段所需要的成本和增加一个字段所需要的成本是相同的,所以预留字段是达不到增加程序的扩展性及减少数据库维护性目的的,一般不使用预留字段。

8 反范式化的问题

反范式化是针对范式化而言的,前面的内容提到了数据库设计需要满足第三范式,所谓的反范式化就是为了性能和读取效率的考虑而适当存在少量的数据冗余,适当地对第三范式的要求进行违反,反范式化就是使用空间来换取时间。以图1为例,图1中4张表的逻辑结构完全符合数据库设计的第三范式,那么在这种情况下想要查询订单信息,sql语句如图3中的左边部分,如果对该数据库做一些反范式化的设计,增加几个字段如图2所示,则订单查询代码就可以简化为图3中的右边部分,由此可见,适度的反范式化可以在复杂查询中减少表的关联数量,增加数据的读取效率。

图1 符合第三范式的数据库设计

图2 反范式化的数据库设计

图3 查询语句对比

9 加强数据优化方面的内容

数据库的优化主要是指数据字典的维护、索引的维护以及适当时对表进行水平拆分或者垂直拆分等操作。数据字典对数据库的维护非常重要,如果不清楚数据库中每一张表及每一张表的每一列的内容是什么,那么以后对数据库的升级和维护将会非常困难,如状态字段中对应值的含义是什么只能从数据字典中查询,需求不断变换那么表结构也在不断变化,还有数据库的存储有个量的瓶颈,当数据达到瓶颈时就要对表中数据进行垂直或水平的拆分。

如何维护数据字典?目前对数据字典的维护有很多种方式,第一种主要是利用第三方工具对数据字典进行维护,用第三方工具维护是针对不同的数据库应用系统来说的;第二种是利用数据库本身的备注字段维护数据字典,以mySql为例:

Create table customer(

cust_idint AUTO_INCREMENT NOT NULL COMMENT '自增ID',

cust_name VARCHAR(10) NOT NULL COMMENT '客户姓名',

PRIMARY KEY(cust_id)

)COMMENT '客户表'

这样用sql语句导出数据字典的时候就可以看到如图4所示的数据字典。

图4 使用备注字段来生成数据字典

如何维护索引?如何选择合适的列作为索引呢?开发人员有一定的原则。第一,出现在where从句、Group by从句和order by从句中的列可以选择作为索引;第二,可选择性高的列要放到索引的前面;第三,一般太长的数据类型不要作为索引。但是要注意,在实际使用中索引并不是越多越好,过多的索引不但会降低写效率而且会降低读的效率,同时要定期维护索引碎片,还要注意在sql语句中不要使用强制索引关键字。

10 结语

笔者在一线教学中深深感觉到,只研究教材闭门造车是无法上好程序设计类课程的。教材一般强调规范的语法、严谨的设计;但在实际应用中,又有着各种各样灵活多变的工程经验,所以一线教师需要经常保持与公司的联系,尤其是项目的跟进,这样才能更好地将教学经验和工程经验相结合,缩短学生理论和实践的磨合过程。

[1] 王向辉,崔巍,徐俊丽.基于CDIO的数据库课程教学改革方案研究[J].计算机教育,2011(5):38-41.

[2] 徐嘉.数据库技术与应用课程的教学改革方案研究[J].科学时代,2012(16).

猜你喜欢
字段字典范式
以写促读:构建群文阅读教学范式
范式空白:《莫失莫忘》的否定之维
孙惠芬乡土写作批评的六个范式
浅谈台湾原版中文图书的编目经验
字典的由来
管窥西方“诗辩”发展史的四次范式转换
题名与责任说明附注字段用法分析
大头熊的字典
正版字典
无正题名文献著录方法评述