成绩表
  学号       姓名  语文  数学  物理   总分
----——    ----   ----  ----  ----  ———
210801051   李四   74    84     94   
210801052    张三  74    83     93学生表:
学号         姓名    性别    所在系  备注
----——     ----   ----     ----   ----
210801051     李四    男      计科    无
210801052    张三    男     计科    无课程表:
编号    课程名   课时   学分  备注
----    ----     ----   ----    ----
1       数学     48      2    
2       英语    48      2其中成绩表里面的学号,姓名是学生表里面的。
课程名是课程表里面的。
问题:
当学生表增加学生,或者课程表增加课程的时候,
成绩表如何自动增加呢?

解决方案 »

  1.   

    trigger触发器
    先从表再主表
      

  2.   

    不同意1楼和2楼的说法,触发器不是这样用的楼主的数据结构设计就有问题,
    其实不存在你所谓的"成绩表"
    无论是增加学生还是增加课程科目,没有发生过的考试,成绩都是null,不能当做0分
    而从数据结构上说,这样的null是业务逻辑,又不是硬生生塞入数据库的,事实上用户的数据结构应该是:考试成绩明细表,结构如下:
    1.考试成绩明细Id(主键)
    2.学生Id(外键)
    3.课程科目Id(外键)
    4.考试成绩
    5.考试时间输出的时候,根据各表联合查询并将各科目行专列交叉输出
      

  3.   


    差不多是这样,
    不过,一般实体字段不会在数据库中多次出现,都是通过Id以外键的方式映射的,
    楼主你还是买本数据库设计的入门资料看看吧,
    你连最基本的关系型数据库的知识都没有,现在学校都不教这些吗?那他们教什么呢?
    [/Quote]
    刚刚开数据库这门口的,很多都不会的,还请谅解呀,呵呵!行转列有点难哦,那用触发器可以吗?是不是简单点呢,谢谢!
      

  4.   

    数据库的怎么跑到C#这里来, LZ是想问程序实现么?
      

  5.   

    都已经告诉你怎么做了,改进表设计,这是最可靠最容易实现的方案,如果谁说可以用触发器,那你就叫他把方案写出来,如果他只是敷衍或者公式般的对答,不会再回头看你的问题了,那我来告诉你用触发器的思路吧:
    1.添加学生信息的同时,在触发器里,从INSERTED表把学生的相关信息再INSERT到成绩表中;
    2.添加课程信息的同时,在触发器里,从INSERTED表把课程名称,
      调用ALTER TABLE修改成绩表的表结构,增加字段名为课程名的字段,
      然而这样做意味着:SqlServer会对成绩表做一系列备份、删除、重建的工作,
    3.最后要强调的是:触发器的代码是不保证被执行的,并且INSERT也不会回滚,
      这样的话,一旦出现异常,对你的数据库将是一场灾难
      

  6.   

    如果楼主仍然想用触发器的话,打开这个链接,这里应有尽有:
    http://msdn.microsoft.com/zh-cn/library/ms123401.aspx
    使用触发器
      

  7.   

    很感谢microtry大哥,学到很多东西,我正在按照你的方法把表重新设计,现在就是输出格式还在摸索!