成绩表:
学号 姓名 语文 数学 物理 总分
----—— ---- ---- ---- ---- ———
210801051 李四 74 84 94
210801052 张三 74 83 93学生表:
学号 姓名 性别 所在系 备注
----—— ---- ---- ---- ----
210801051 李四 男 计科 无
210801052 张三 男 计科 无课程表:
编号 课程名 课时 学分 备注
---- ---- ---- ---- ----
1 数学 48 2
2 英语 48 2其中成绩表里面的学号,姓名是学生表里面的。
课程名是课程表里面的。
问题:
当学生表增加学生,或者课程表增加课程的时候,
成绩表如何自动增加呢?
学号 姓名 语文 数学 物理 总分
----—— ---- ---- ---- ---- ———
210801051 李四 74 84 94
210801052 张三 74 83 93学生表:
学号 姓名 性别 所在系 备注
----—— ---- ---- ---- ----
210801051 李四 男 计科 无
210801052 张三 男 计科 无课程表:
编号 课程名 课时 学分 备注
---- ---- ---- ---- ----
1 数学 48 2
2 英语 48 2其中成绩表里面的学号,姓名是学生表里面的。
课程名是课程表里面的。
问题:
当学生表增加学生,或者课程表增加课程的时候,
成绩表如何自动增加呢?
先从表再主表
其实不存在你所谓的"成绩表"
无论是增加学生还是增加课程科目,没有发生过的考试,成绩都是null,不能当做0分
而从数据结构上说,这样的null是业务逻辑,又不是硬生生塞入数据库的,事实上用户的数据结构应该是:考试成绩明细表,结构如下:
1.考试成绩明细Id(主键)
2.学生Id(外键)
3.课程科目Id(外键)
4.考试成绩
5.考试时间输出的时候,根据各表联合查询并将各科目行专列交叉输出
差不多是这样,
不过,一般实体字段不会在数据库中多次出现,都是通过Id以外键的方式映射的,
楼主你还是买本数据库设计的入门资料看看吧,
你连最基本的关系型数据库的知识都没有,现在学校都不教这些吗?那他们教什么呢?
[/Quote]
刚刚开数据库这门口的,很多都不会的,还请谅解呀,呵呵!行转列有点难哦,那用触发器可以吗?是不是简单点呢,谢谢!
1.添加学生信息的同时,在触发器里,从INSERTED表把学生的相关信息再INSERT到成绩表中;
2.添加课程信息的同时,在触发器里,从INSERTED表把课程名称,
调用ALTER TABLE修改成绩表的表结构,增加字段名为课程名的字段,
然而这样做意味着:SqlServer会对成绩表做一系列备份、删除、重建的工作,
3.最后要强调的是:触发器的代码是不保证被执行的,并且INSERT也不会回滚,
这样的话,一旦出现异常,对你的数据库将是一场灾难
http://msdn.microsoft.com/zh-cn/library/ms123401.aspx
使用触发器