首先,对于学号和课程号存在多对多的关系,你的表设计基本上没问题
对于第一个问题,你可以设置一个关系(relation)来强制必须先存在s表的主键(cno),才能完成插入操作(逻辑上也应该是这样,外键必须指向已存在的主键)
第二个问题可以在触发器中作如下判断:
DECLARE @sno int
DECLARE @avgscore int
IF UPDATE(g)
BEGIN
select @sno=sno from inserted
select @avgscore=avg(g) from sc where sno=@sno
-- update average score for s.g ...
update s set g=@avgscore where sno=@sno
END