VC6 + ODBC做的一个MIS小程序中,要删除一个系别设置表中某条记录,但他的ID被专业表(这个系开设的某个专业), 班级表(属于这个系的某个班)引用作为外码,在删除时报错,这个该怎么处理呢?是提示用户不让删除呢,还是先把其它表中用这个ID作外码的记录删除掉,然后再把这条记录也删除,这个系不存在了,其开设的专业和班级也就不存在了,就像树根被删除,所有子树全部被删那样呢??大家在碰到这种情况时是怎么处理的?

解决方案 »

  1.   

    应该允许删除吧
    首先提示用户该系别设置正被班级或专业使用,是否确认删除?如果确认删除
    当然必须作为一个事务,先删除对应班级、专业在删除系别设置,可做一触发器或
    外键关联删除
      

  2.   

    嗯,说得有道理!又仔细考虑了一下,我觉得在实际情况中一般是不会出现这样情况的:直接取消某个系,并删除它下面所有专业,班级和学生,在现实中这些学生总得有个安置吧。是不是应该先将学生转到其它系的某个专业,班级,当所有学生全部转移完毕后,再删除班级,专业,使这个系变成个空壳,这个时候再删除,就不会有外键约束而报错了。这是我的一点想法,不知道这么做行不行,符不符合实际情况,想听听高手们的意见!
      

  3.   

    具体你的数据怎么办,是由你的应用决定的。如果要简单,可以禁止用户删除非空的系,并提供将某系的所有资料移到它系的功能。我们有一个类似的问题,就是这样做的。毕竟用户删除一个系的可能性太小了,多半是为了删除测试数据才会这样做。
      

  4.   

    是啊,可是怎么样将一个系的资料转到其它系呢,两个系的专业和班级设置很多都不一样,我想直接转移是不太可能的吧,楼上的能不能说详细点,分不够我再加呀!
      

  5.   

    如果就实现来讲,无非就是专业等表中的一个字段--院系Id更改了一下。如果你做这个功能是为了应付测试数据,这样应该就够了。
    如果你这个功能是为了应付学校的院系合并什么的,那首先要具体和学校的老师,也就是你的客户多交流,搞清楚学校是怎么处理这个问题的。
      

  6.   

    同意,此问题更应该算是需求问题,根据不同客户需要,技术解决可以用很多种途径。
    至于你说“两个系的专业和班级设置很多都不一样,我想直接转移是不太可能的吧”这样的问题应该先在现实生活中找解决办法,毕竟数据结构和算法是对现实的反映,现实生活中无解的问题计算机技术也解决不了。
    如果如你所说,只是为了测试删除功能,又要保留旧数据的话,另建一个同构的测试用临时表,删除前把要删的信息备份过去就是了,原数据就可以简单咯嚓掉。