吕震宇 丛贺 张迪
摘 要:培养方案管理系统提升了人才培养方案修订工作的质量和效率,然而,该系统在使用过程中也暴露出了专业间课程独立修改与数据规范化设计难以两全、高并发环境下数据容易出现不一致、共享课程导致某一专业培养方案定稿困难等一系列问题。文章引入了“写入时复制”(Copy-on-Write)技术,增加了专业锁、学期锁、课程锁等逻辑锁,利用两阶段锁协议等技术对培养方案管理系统进行重构,保证了系统的稳定高效运行,为此类数据库系统并发一致性问题提供了解决方案。
关键词:培养方案管理系统;写时复制;数据库设计
中图分类号:TP311 文献标识码:A 文章编号:2096-4706(2023)07-0020-05
Abstract: The Training protocol management system improves the quality and efficiency of talent training protocol revision work, however, the system in the process of use also exposes a series of problems such as professional course independent modification and data standardization design is difficult to both, high concurrency environment data prone to inconsistent, sharing courses lead to a professional training protocol finalized difficulties and so on. This paper introduces the technology of “Copy-on-Write”, adds logic locks such as professional lock, semester lock and course lock, and uses the two-stage lock protocol and other technologies to reconstruct the training protocol management system. It ensures the stable and efficient operation of the system, and provides a solution for the concurrent consistency problem of such database system.
Keywords: training protocol management system; copy-on-write; database design
0 引 言
专业人才培养方案是围绕一定人才培养目标对学生在校期间的教育、教学、学习、训练等活动进行设计和实施的规划。人才培养方案制定是一个复杂的过程,人才培养目标、毕业要求、课程体系、课程大纲之间相互支撑,培养方案制定过程的复杂性、课程编码的规范和唯一性要求等,迫切需要通过信息化手段实现培养方案的修订。
高校不同专业培养方案修订往往是同时进行的,不同专业间存在大量共享课程,培养方案管理系统在设计之初就必须考虑共享课程在不同专业间的隔离,即一个专业对某门课程的修改不能影响另外一个专业;此外一个专业的培养方案一旦定稿,这些共享课程也必须定稿,其他专业不得以任何理由进行修改;很多高校培养方案修订和实施往往是并行执行的,因此培养方案管理系统还应该考虑按照学期锁定培养方案,所有这些大大增加的培养方案管理系统设计难度,需要精心架构逻辑锁定方案,以确保系统的稳定运行。
1 培养方案管理系统现状及问题
现有培养方案管理系统多以驱动教务系统运转为目的,片面突出了培养方案系统在教务管理中的作用,缺少对培养方案科学制定过程的有效支撑。H高校2016年开发了培养方案管理系统1.0版,规范了培养方案修订过程,实现了培养方案文档的自动化生成。然而该系统由于缺乏对共享课程的有效隔离,且没逻辑锁定机制,导致无法处理诸如专业培养方案定稿、锁定某些学期的培养方案等问题,一个专业对课程的修改有可能会影响到另外一个专业,高并发环境下难以保证数據的一致性。具体体现在:
1.1 “数据冗余”与“并发控制”两难的问题
培养方案管理的核心是计划进程表管理,计划进程表用于记录不同专业在不同学期的课程开设情况。按照数据规范化理论,满足3NF的培养方案核心数据表设计应围绕专业与课程的多对多关系展开,如图1所示。
该设计方案的优点是符合数据规范化要求,消除了数据冗余,为数据“并发控制”奠定了基础,但缺点是两个不同的专业可能引用同一门课程(例如“工商管理”专业和“信息管理与信息系统”专业均开设“高等数学”课程),一个专业对课程的修改将导致另外一个专业课程也发生改变。
解决该问题的一种办法是将课程表与培养方案课程表合并,如图2所示。
该方案虽然能够确保一个专业对共享课程的修改不会影响另外一个专业,但引入了大量的数据冗余将导致潜在的插入异常、删除异常和更新异常的发生。
1.2 专业培养方案定稿困难
当多个专业同时修订培养方案时,部分专业修订完成后需要执行“定稿”操作。一旦培养方案定稿,就不能再对其做任何的修改。然而由于不同专业间课程的高度共享性,一门课程可能在多个专业同时开设,如何保障未定稿专业对该课程的修改不影响到已定稿专业,是一个需要解决的问题。
1.3 学期锁定问题
本科培养方案是对本科生4-5年在校学习课程的计划,实际操作过程中可能存在边制定培养方案边予以实施的情况。例如,先将专业培养方案前两个学期的课程定稿,导入教务系统予以实施,然后允许专业负责人对3学期及以后的培养方案继续进行修订。这种做法会极大地增加系统管理的复杂度。例如A专业在第2学期开设了《高等数学》,而同一门《高等数学》B专业在第3学期开设。锁定前两个学期意味着B专业不能再对《高等数学》课程做任何修改(因为已经被A专业导入教务系统并实施),但可以调整开课学期(只能调整到3学期及以后学期)。
1.4 课程锁定问题
培养方案管理系统中的课程一旦导入教务系统,就意味着该课程不能再做任何修改,如何通过建立课程锁定机制限制意外修改也是系统在设计过程中需要加以考虑的问题。
在实际应用过程中,专业锁定(培养方案定稿)、学期锁定、课程锁定往往是交叠进行的,可能同时存在专业锁定、学期锁定、课程锁定的情况,此时业务处理还需要考虑不同类型锁定的优先级问题,所有这些都大大增加了系统设计的复杂度。
2 培养方案管理系统核心业务表格设计
为了确保在消除数据冗余的同时解决两个专业修改共享课程造成的并发控制问题,引入COPY ON WRITE算法,在表中增加引用计数器字段,实现了数据规范化和并发控制的平衡;通过将学期从字段提升为实体,并在数据库相应表格中增加专业锁、学期锁、课程锁字段,配合锁定算法,实现根据业务逻辑对数据进行锁定,避免意外修改。
2.1 核心业务数据库设计
在核心业务表数据库设计过程中重点考虑了如下因素:
1)专业、课程、学期表均设有“是否锁定”字段,允许实现业务逻辑上的锁定操作。如某一专业培养方案已经定稿,而其他专业尚在修改中,可以锁定该专业,避免意外的修改;如果某一学期的课程计划已经开始实施,可以锁定该学期,确保该学期下的所有课程不会再发生更改;如果某一课程已经录入教务系统,可以锁定该课程,禁止对该课程任何形式的修改。
2)课程表中增加了“引用计数”字段。该字段用于同步记录有多少个专业开设该课程,同时该字段也用于指导COPY ON WRITE的修改动作。例如引用计数为1的时候,说明只有1个专业引用该课程,那么可以在该课程记录上直接进行修改操作;如果引用计数大于1,说明有多个专业引用该课程,那么在修改时先要拷贝一份出来进行修改,同时对引用计数减1。
3)课程表中设置了自动增长型字段“课程内部编号”作为主键,而“课程编号”为非主键。这主要考虑课程编号后期可能会统一编排,系主任在调整培养方案时可以不受课程编号是否唯一的限制,也为“COPY ON WRITE”提供克隆课程的基础。用户可以通过系统提供的错误检查功能发现潜在的课程编号重复问题并加以修正。
计划进程核心业务表逻辑数据库设计如图3所示。
2.2 COPY ON WRITE算法设计
通过COPY ON WRITE算法和引用计数器,解决“数据冗余”与“并发控制”两难的问题。如果多个专业开设了相同的课程,它们将通过培养方案课程表引用到同一条课程记录。同时为了后续操作方便,在课程表中增加了“引用计数”字段记录有多少个专业开设该课程。表1、表2、表3分别展示了专业、课程、培养方案课程之间的关系。可以看出,工商管理、信息管理与信息系统专业均开设了高等数学与英语课程,只是开课学期不完全相同。此时高等数学、英语两门课程的引用计数均为2,说明各有两个专业开设了该课程。
若信息管理与信息系统专业决定将高等数学的学时从80学时提高到96学时,由于目前高等数学引用计数大于1,因此首先将高等数学课程拷贝一份并进行修改,然后修改原有高等数学课程的引用计数,最后修改培养方案课程表中信息管理与信息系统专业高等数学的课程内部编号。具体结果如表4和表5所示。其中,括号的内容表示新修改的值。
如果此时工商管理专业决定将高等数学学时提高到88,由于其所引用的课程内部编号为1的课程引用计数为1,因此可以直接在原地进行修改。再次修改后的课程表如表6所示,培养方案课程表不变。其中,括号的内容表示新修改的值。
若工商管理最终决定将高等数学课程修改为96学时,修改后的课程与信息管理与信息系统专业保持一致,此时将触发相同课程的“合并”操作,同时引用计数也将进行合并。最终修改结果如表7和表8所示。其中,括号的内容表示新修改的值。
2.3 业务逻辑锁定设计
在数据库设计中,分别在专业、学期、课程表中增加了是否锁定字段,用于构建专业锁、学期锁、课程锁三种虚拟业务逻辑锁,这些锁相互交叠,确保“定稿”后的培养方案不会因为并发问题而被意外修改。专业锁、学期锁、课程锁的具体加锁、解锁流程如图4和图5所示。
2.3.1 专业锁
专业锁用于锁定某一专业的计划进程表。一旦某专业被锁定,该专业将无法继续编辑(包括插入、删除、修改)计划进程表中的课程,同时该专业计划进程表引用的课程将一并锁定,不允许任何人对这些课程继续进行修改。锁解锁时,所引用课程通常可以一并解锁,除非以下情况:课程被其他已锁定专业锁定;在锁定的学期中有该课程。
2.3.2 学期锁
学期锁用于锁定某一学期。一旦某学期被锁定,该学期所开设过的课程将无法继续编辑(包括删除、修改);计划进程表中课程的开课学期如果处于非锁定学期,则只能更改至其他非锁定学期;计划进程表中课程的开课学期如果处于锁定学期,则无法继续编輯课程开课学期等任何信息。学期锁解锁时,所引用课程通常可以一并解锁,除非以下情况:课程被已锁定专业锁定;在其他锁定学期中引用了该课程。如图6和图7所示。
2.3.3 课程锁
课程锁用于锁定某一课程。一旦某课程被锁定将无法再进行删除,但可以通过COPY ON WRITE的方式进行编辑。在以下情况锁定的课程不能被解锁:课程被已锁定专业锁定;在锁定学期中引用了该课程。通常情况下不直接锁定课程或解锁课程,多为锁定学期或锁定专业等操作伴随的课程锁定。当课程被同步到教务系统时,系统会对已同步课程强制触发课程加锁动作。
3 系统实现
上述设计方案已经成功应用在了H高校培养方案管理系统中。系统使用SQL Server作为后台数据库,将专业、学期的锁定与解锁动作封装为存储过程并用事务包裹,确保了操作的原子性。在对80多个专业同时修订培养方案、多个专业同时引用并修改相同课程的场景考验下,COPY ON WRITE算法运行稳定。数据库设计方案在确保了数据规范化的同时,配合并发一致性設计方案,使所有培养方案数据的内在逻辑关系都得到了有效保障。
4 结 论
通过将COPY ON WRITE算法引入培养方案管理系统数据库设计,解决了“数据冗余”与“并发控制”的两难问题;通过引入专业锁、学期锁、课程锁三种虚拟业务逻辑锁,解决了培养方案定稿、培养方案部分定稿等业务中,共享课程间相互交叠课程锁定问题;通过在数据库设计中添加引用计数字段,帮助COPY ON WRITE判断修改时是否需要复制或合并。实践结果表明,该培养方案管理系统逻辑锁定方案达到了预期设计目标,能够在大规模数据访问中保持数据的一致性。
参考文献:
[1] 曹宇新.“强基计划”人才培养模式的高校政策再制定研究——基于36所试点高校“强基计划”培养方案的文本分析 [J].教育理论与实践,2022,42(3):3-7.
[2] 刘云.“数据库原理与应用”课程思政教学设计与实践探索 [J].现代商贸工业,2022,43(12):140-141.
[3] 孙群,温伯威,陈欣.多源地理空间数据一致性处理研究进展 [J].测绘学报,2022,51(7):1561-1574.
[4] 姜文,刘立康.Oracle数据库死锁问题研究 [J].计算机技术与发展,2014,24(3):97-101.
[5] 苏学斌.基于聚类的数据库事务并发控制算法研究 [D].哈尔滨:哈尔滨工业大学,2020.
作者简介:吕震宇(1976—),男,汉族,山东安丘人,教授,硕士,研究方向:信息管理与信息系统、数据分析与挖掘;丛贺(1992—),男,汉族,内蒙古赤峰人,硕士在读,研究方向:数据库并发一致性控制;张迪(1999—),女,汉族,河北沧州人,本科,研究方向:计算机软件、信息管理。