首页新闻找找看学习计划

专业表,班级和学生表

0
悬赏园豆:40 [待解决问题]

专业表,班级和学生表。专业表有id和 name,id自增长为主建,在班级表下有id(主键)和名称备注,还有个classid关联专业表主键。学生表下也有单独的stuid关联班级表主键。可在vs中做,增,删时包有主外键约束报错,这SQL语句咋写啊,存储
过程了,关键是觉得是语句的问题,该咋写啊。

zon的主页 zon | 初学一级 | 园豆:137
提问于:2012-03-30 14:47
< >
分享
所有回答(3)
0

1. 不要设置外键引用,因为以后修改,不一定这个几个表要关联,关联关系在用到时候在SQL语句里进行条件判断就行

2.主键没有任何的意义,只是唯一标识,如果真的建立了约束关系,就必须考虑到级联删除和级联修改的问题,很简单。

3.总之企业开发很少设置外键约束

4.按照你的思路给你简要提一下:专业id <---------学生表下的classid (学生学的专业在专业表的专业里),这样如果删除专业id那么就会报错,因为如果删除了学生表的专业classid不在专业id里,因此回滚事务,解决的办法是删除学生表中该专业所有的classid再删除专业表的id,就OK了。

5.不明白可以联系我的QQ:2627673890

Halower | 园豆:1723 (小虾三级) | 2012-03-30 15:24

是啊,必须先删学生表在删上级啊

支持(0) 反对(0) zon | 园豆:137 (初学一级) | 2012-03-30 15:32

我们知道但不熟悉的人在删除时不会按顺序来啊,但这样会产生个错误啊,这杂解决啊

支持(0) 反对(0) zon | 园豆:137 (初学一级) | 2012-03-30 15:36

@zon: 不要外键,直接用条件语句维护就行。

BEGIN TRANSACTION

DECLARE @errorSum int

 SET @errorSum=0 

delete from 学生表 where +你要定义的条件例如classid,name=?等等 --删除学生表中的记录

SET @errorSum=@errorSum+@@error

delete form 专业表 where  id no in (select classid as 专业id form 学生表) and+你要定义的条件例如classid,name=?等等

 SET @errorSum=@errorSum+@@error  --累计是否有错误

 If @errorSum>0

 Begin  

rollback transaction  

 select '失败'

End Else

 Begin

 commit transaction

 select'成功'

 End

 这样的思路就是必须先删除学生表中的专业记录才能删除专业表里的专业id记录,我没有用

外键,我用了事务控制,别的的方法特别多,而且灵活,理解了自己试试别的

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2012-03-30 23:39

@zon: delete  FROM 专业表 WHERE id  not in ( select classid FROM 学生表 )  and id =@num (我假设的条件)

删除学生表的记录不受专业id约束,所以只要给删除专业id加上条件就行,如上id不在学生表的学生专业的集合里同时 id等于你选择的数是才删除,给我给点分啊。

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2012-03-31 00:17
0

关注。。。

KivenRo | 园豆:1722 (小虾三级) | 2012-03-31 09:06

怎样解决添加时约束的问题啊

支持(0) 反对(0) zon | 园豆:137 (初学一级) | 2012-03-31 12:21
2

这个应该是你数据库设计的问题,参照完整性的限制,不能引用不存在的实体,也就是说从表中的数据必须在主表中存在,你可以查一下相关文档,解决这个问题。

轻狂の书生 | 园豆:1040 (小虾三级) | 2012-03-31 11:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册