Blog

尴尬的数据库课

昨天下午我们的数据库老师举行了一次可参加可不参加的复习课,当时我抱着说不定会讲一些考试题的心情,艰难的从床上硬爬起来去了学校。当天有大约四分之一的同学参加了复习课,除了拿到了最后一次作业外,老师还进行了一些答疑。我前一天睡觉太完,本身也觉得没有什么疑惑,当中忍不住睡了一觉,醒了后仔细的回顾了一下这学期在这门课上学的课程内容,再次验证一下自己对《数据库》这门课的态度。

左边是我们这门课在学校的课程网站上,笔记部分的截图。从这个“目录”上,大概可以看到我们这学期学了什么东西。在介绍完一些数据库的基础概念(比如 DBMS)后,我们学了 ER 模型,然后简单介绍了创建表格、插入数据之类的 SQL 命令。接下来我们学的是 Normal Form,然后是 Relational Algebra 和 SQL(主要是用于各种不同条件下的 SELECT 语句)。

在我这学期学的五门课当中,数据库算是最简单的一门。很多知识我过去接触过,只是没有系统的学习。因此无论听课、作业,我几乎不用花费力气就可以弄完。但这门课的许多内容,我目前却觉得似乎没有太多学习的必要。不过另一方面,在学业压力大的时候,我也希望有一门课可以轻松的完成,所以现在再说这门课的坏话觉得有点尴尬。

我感觉这门课有两大问题:一是内容陈旧、二是太过简单。

关于内容陈旧,我觉得最大的例子就是 RA 部分了。它的内容基本上与 SQL 重复,RA 本身,在我看来,也不过是 SQL 的一种数学符号上的替代品。如果你先会了 SQL,再学 RA 就感觉食之无味,到底学了它有什么用?我们老师在私下谈话的时候也说,在工业领域中,一般都是从客户的需求故事中总结出 ER 模型来,然后把 ER 模型转换成 SQL 表述语句,当中没有 RA 这一步。我觉得如果把这两个内容放在两门课里来学,比较入门的课里讲 RA,比较高深的课里讲 SQL 是可以理解的。但我们这个学期先学了 RA,又学了 SQL,也不应该有什么“担心学生一下子理解不了 SQL”的顾虑才对。

我之前已经对 SQL 有一些了解,上个学期《软件工程》这门课上写小组项目的时候也用上了 JDBC 和 SQLite,这个学期开始的时候也用 Ruby + SQLite 写了一个程序来保存 Twitter 的记录,当中也用到了添加、删除、合并表等操作。因此在这学期学 RA 的时候,总感觉特别别扭。当然 RA 本身也是非常简单,如果有了 SQL 的基础的话,知道两者之间的一些细节的区别(比方集合)后,学 RA 基本上就是看一遍笔记的事。不过就算如此,我也不愿把相似的内容重复的学两遍。

关于课程的难易方面,我是觉得有些部分的内容完全可以一带而过,不用浪费那么多时间。比如 Normal Form 和 Functional Dependencies 的部分,基本上就是简易逻辑上的内容,一个中国的高一学生就可以搞清楚,我想当地学生在大学三年级之前应该也接触了逻辑了吧。而现在的情况是,在 FD 和 NF 部分我们花了很多节课的时间来讲一些很基础的东西。

整个课程,在期中考试的时候我们学了大部分的 RA,在期末考试时重点是 SQL。这两部分,我的感觉是花半天过一遍笔记就能把基础的知识都学会,剩下的就是所谓的“题海战术”就可以解决的了──看一些例子,自己写写 SELECT 语句,然后跟答案比对比对,就是个熟练活而已。相反,我觉得对于计算机科学的学生来说,如果可以把重点放在数据库和应用程序的结合上面,是我一直想要的。JDBC 之类的东西,我们在课程的最后是一笔带过的,我觉得这些反而是更应该自习钻研的。毕竟现在网络编程占到了实际应用编程的很大一部分比例,而数据库在网络程序中又是基础性的功能之一,所以把重点放在数据库编程上面,我觉得比反反复复将一些数据库的基础知识要好。

另外,我们课的最后一次作业用的竟然是 IBM DB2,这真让我奇怪。这个数据库应该也算是陈旧的吧,而且往高端比未必拼的过 Oracle,往低端比也未必拼的过 MySQL,为什么要用这么“传统”的数据库系统呢?老师的解释是有些数据库的 SQL 部分实现不完整,所以我们课堂上学的一些 SQL 写法无法被那些数据库系统解释。我倒是觉得这不是一个大问题,反正有些数据库操作,比如 Division,我们已经在课上学了集中不同的 SQL 语句的写法。DB2 最大的问题是不跨平台,只能在 Windows 上使用。目前有人做了 for Mac 版本,可是还有很多问题,我在尝试安装时,下载那一步就没有通过。加拿大大学毕竟不是国内,班上用 Mac 的人也有很多,而老师却用一个老旧的不跨平台的数据库系统给我们练习,实在是让我想不通。

没有评论

Leave a Reply