简单一些应该这么说:
(学生资料表) 中有如下字段:
姓名,学号,系别名称
(课程资料表) 中有如下字段:
课程编号,课程名称,学分
(系别任务表)中有如下字段:(这里的意思是某个系在某年某学期所选的课) 系别名称,课程编号,学年,学期
( 学生成绩表)中有如下字段:
学号,课程编号,成绩,学年,学期 ,
需要做的是:
当我增加(系别任务表)中的内容时,(学生成绩表)里面的内容要有相应的变化,条件是(学生成绩表).学号=(学生资料表).学号 and
(学生资料表).系别名称 = (系别任务表).系别名称
不知道这样说的话,大家是不是觉得清楚一些!?
(学生资料表) 中有如下字段:
姓名,学号,系别名称
(课程资料表) 中有如下字段:
课程编号,课程名称,学分
(系别任务表)中有如下字段:(这里的意思是某个系在某年某学期所选的课) 系别名称,课程编号,学年,学期
( 学生成绩表)中有如下字段:
学号,课程编号,成绩,学年,学期 ,
需要做的是:
当我增加(系别任务表)中的内容时,(学生成绩表)里面的内容要有相应的变化,条件是(学生成绩表).学号=(学生资料表).学号 and
(学生资料表).系别名称 = (系别任务表).系别名称
不知道这样说的话,大家是不是觉得清楚一些!?
查询可以根据你的逻辑来连接各个表,应该不是什么难事,问题是设计还是不够清晰,根据wylyf(李寻欢) 的改动后应该能清晰些。
课程表:
课程编号(PK),课程名称,学分,学年,系别,学期……
学生表:
学生编号(PK),姓名,学年,系别,学期……
成绩表:
学生编号(PK),课程编号,成绩这样你就可以简单容易的实现你的功能,当然在课程表里课程名称会有重复,比如一年级有数学课,二年级也会有,这是课程编号不同,这里要求课程编号唯一,作为主键。
你在增加学生的时候可以做这样的触发器
CREATE TRIGGER [学生表触发器名称] ON [dbo].[学生表]
FOR INSERT
AS
INSERT INTO 成绩表(学生编号,课程编号)
SELECT A.学生编号,B.课程编号
FROM INSERTED A INNER JOIN 课程表 B ON A.学年=B.学年 AND A.系别=B.系别 AND A.学期=B.学期
当然上面的数据表的设计不是很符合数据库范式的,但是简单实用,如果要设计基本符合范式的数据库就要这样。课程表:
课程编号(PK),课程名称,学分,学年系别编号,……
学生表:
学生编号(PK),姓名,学年系别编号……
成绩表:
学生编号(PK),课程编号,成绩
学年系别:
学年系别编号(PK),学年,系别,学期……你在增加学生的时候,在选择学年系别之后,要记住他的学年系别编号,那么可以做这样的触发器
CREATE TRIGGER [学生表触发器名称] ON [dbo].[学生表]
FOR INSERT
AS
INSERT INTO 成绩表(学生编号,课程编号)
SELECT A.学生编号,B.课程编号
FROM INSERTED A INNER JOIN 课程表 B ON A.学年系别编号=B.学年系别编号 当你要列出学生的成绩时
你可以用这样的查询
SELECT A.学号,A.课程编号,B.课程名称,A.成绩,C.学年,C.学期 ,C.系别
FROM 成绩表 A INNER JOIN 课程表 B ON A.课程编号=B.课程编号
INNER JOIN 学年系别 C ON B.学年系别编号=C.学年系别编号就可以了不过上面的设计还可细分为更多的表,那要就一点都不浪费空间了。你自己想吧。
1, 首先,看wylyf(李寻欢) 的表的设计:
(系别任务表): 编号 ,系别名称,课程编号,学年,学期
( 学生成绩表):学号,编号,成绩
(课程资料表): 课程编号,课程名称,学分
(学生资料表): 姓名,学号,系别名称
你说的意思是用编号将 ( 学生成绩表)和(系别任务表)关联起来,而我则转了一圈,用(学生资料表)来关联两个表。你的这种用法确实简单,但有一个问题是:当学生有任选课的时候,这种表就无法解决!你假设的是大家的课都一样,而我想的是,大家有一样的公共课,也有自己的任选课!这种情况怎么办呢?
你说对吗??????
2,Yang_(扬帆破浪) “是在输入时一个提示的查询问题“ 不是这样的!
我想是你没有明白我的意思,其实,我要实现的是(输入学生成绩),包括公选课和任选课,我希望在输入系别任务的时候,相应的数据能映射到学生成绩表中,这样的话,用户就只需要输入某个学生的任选课就可以了!!!
你的这个我回去调试一下!!
受你的启发!
我将自己的设置如下:
(学生资料)a : 姓名,学号,系别名称 ,入学时间 (说明:学生的一些基本情况)
(课程信息库)b : 课程编号,课程名称,学分 ,学时 (说明:为避免数据的冗余,我将学校所有的课程资料集中在一起管理)
( 学生成绩表)c:学号,课程编号,成绩,学年,学期,入学时间(说明,这里就是学生的成绩管理了)(系别任务表)d: 系别名称,课程编号,学年,学期(由于每个系要查询自己每年所选的课程,因此而制)
1,增加系别任务时,学生成绩自动增加:
create trigger myfirst on 系别任务表
for insert
as
insert into 学生成绩(学号,课程编号,学年,学期)
select b.学号,a.课程编号,a.学年,a.学期
from 学生资料 b inner join inserted a on b.系别名称 = a.系别名称
2,增加学生时,学生成绩自动增加:(这里很抱歉,似乎不能实现,为了实现这个功能,我是否该加入学时间字段)
CREATE TRIGGER [学生表触发器名称] ON [dbo].[学生表]
FOR INSERT
AS
INSERT INTO 成绩表(学号,课程编号,学年,学期)
SELECT b.学号,a.课程编号,a.学年,a.学期
from inserted b inner join 学生成绩 a on b.入学时间 = a.入学时间
当然,这里的前提是在成绩表里至少有一个人存在
数据冗余如下:在(学生成绩表)里重复输入系别名称。
-------------------------------------------------------
分析我们所设计的数据库不同之处:
课程表:
课程编号(PK),课程名称,学分,学年系别编号(多加)
学生表:
学生编号(PK),姓名,学年系别编号(多加)
成绩表:
学生编号(PK),课程编号,成绩 ,(少了学年学期)
学年系别:
学年系别编号(PK),学年,系别,学期……(相当于我的系别任务表)
我的(系别任务表): 系别名称,课程编号,学年,学期增加学生的时候成绩表随着变化的触发器:(你的课程编号其实是间接通过系别任务来实现的,也就是说假设你增加的这个学生的学年系别编号在课程表里没有数据的话是无法触发的)
CREATE TRIGGER [学生表触发器名称] ON [dbo].[学生表]
FOR INSERT
AS
INSERT INTO 成绩表(学生编号,课程编号)
SELECT A.学生编号,B.课程编号
FROM INSERTED A INNER JOIN 课程表 B ON A.学年系别编号=B.学年系别编号 你的思路不错,可或许我没有完全明白你的意思
1,学生的基本资料一旦录入,他在数据库里应该有一定稳定性,他的学年系别编号是否也就固定下来了 ,那么到第二学年了以后怎么办呢?难到我再次输入该学生吗?
2,课程表是全校课程的集中,你加上了学年系别编号,倒是说的过去。可是一门课程可能有几十个系来选,是不是有太多的数据冗余,
你看是不是还需要改进呢?
索引:学号
系别任务信息:系别编号、系别名称、学年、学期、课程编号、课程类别(选修/必修)
索引:系别+学年+学期+课程编号
课程信息: 课程编号、课程名称、学时、学分
索引:课程编号
学生成绩信息:学号、学年、学期、课程编号、学分
索引:学号+学年+学期+课程编号说明:
1.同一门课程可能对应多个系别的不同学年、学期;
2.“学生信息表”中的学年、学期一直为当前的学年、学期。(根据系统时间自动增加,“毕业”特殊处理。)
3.增加学生时,必修科目自动增加入“学生成绩信息表”,选修科目要选择加入。
BTW:只是一点想法,供参考。触发器还没用过,学习中……
相信用触发器写程序的没有一个是高手.
因为高手都不用触发器.
这位兄弟怎么这么说,你算不算是高手,你在用什么?你会用什么?你又懂什么?
gzhughie(hughie)
low(每走一步都那么难)
cockie(海是蓝色的)
wylyf(李寻欢)
Yang_(扬帆破浪)
这已经讨论到了数据库的最底层规划问题,非常的不好意思,让大家看我罗罗嗦唆的这么多问题。非常的感谢大家!!真是做到了最后才发现的自己最基本的规划有问题,从大家的建议得到不少知识,在次的谢谢大家!!!!
gzhughie(hughie)
cockie(海是蓝色的)
low(每走一步都那么难)
Yang_(扬帆破浪)
wylyf(李寻欢)
数据库的底层规划非常重要,它是以后设计的根本所在!
也欢迎大家来讨论!毕业设计完了,暂告一段落!