日期:2014-05-16 浏览次数:20437 次
鉴于教务系统基础数据库的构建整整用了我们一个月时间,为了这一个月,也需要写篇博客总结一下。首先说一下教务系统现有部分,方便对下面内容的说明:教务系统包括四部分:基础系统、考试系统、评教系统、选课系统,其中基础系统用于对基础数据的维护,其它系统看只看系统名就可以知道其功能。
数据库设计的第一步就是怎么命名,第一版的命名规则是:
SELECT * FROM T_E_K_ExamStudent如果再加上跨表查询,得多少个_,这不是为自己找罪受吗?再说K是考试拼音第一个字符,而B表示英语Basic的第一个字符,中英文混乱,修改后,最终的命名规则为:
SELECT * FROM TE_ExamStudent这样的语句,清晰、易写、容易维护。
教务系统整体设计如下图:
基础数据由基础系统维护,例如:学生信息、教师信息、班级信息等,负责对这些信息的增删改查。其它系统有自己的表,对于基础信息,其它表只有读取的权利,不能修改或是删除。
教务系统中的表设计如下图:
即实体表之间不能直接有关联,都是通过第三张关系表关联。这与以前的数据库设计有很大的区别,以前只有表数据为多对多时,才用第三张表关联;但现在是只要两张表有关系,不管是一对多还是多对多,都是通过第三张表关联。
这样设计的好处是,加入某个学院下不再有某个专业时,只需把关系表中的数据删除即可,两个实体表都不要改变,这样可以充分保证表之间的独立性和扩展性,而这正是基础数据最重要的因素。
当初设计数据库时,分歧很大的一个问题是,基础数据库表字段丰富好还是精简好?例如,学生表要不要包含身份证号、邮箱等字段?
一种方案是,精简型,当需要额外添加字段时,这些字段添加到新建的关系表中;另外一张方案是丰富型,认为是应该把所有能用到或是暂时用不到的字段添加到实体表中。因为把实体字段存在于关系表中,造成的数据冗余大于在实体表中,所以经过讨论采用的是丰富型。
现在想想当初为什么会产生这个讨论,很大程度上是因为设计数据库时直接跨越到了逻辑设计阶段,忽视了概念设计阶段,由此产生了对实体属性的讨论。
到此阶段对教务系统基础数据库设计已经结束,在此需要再补充几点: