怎么存储课表?

jaidy 2004-05-02 05:29:51
就是平常学校使用的课表:
星期一 星期二 星期三 星期四 星期五
1 语文 数学 英语 政治 地理
2 ...
3
4
5

这样的结构怎么存储在sql server2000的表里面?
我要存储很多班级的课表,总不能每个班用一张表把?
...全文
173 14 点赞 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
carl2004 2004-05-03
使用存储过程,以班级为参数
pro_kc 1
1表示1班,这是我随便写的个字段。
查出来的结果放到一个记录集,前台调用。
要修改,课程安排可以直接在视图上修改,不过要注意约束
  • 打赏
  • 举报
回复
jaidy 2004-05-02
就是说,这个表外面怎么通过存储过程来修改课程安排 这个table?
  • 打赏
  • 举报
回复
carl2004 2004-05-02
我不懂你的意思,说详细点。
  • 打赏
  • 举报
回复
jaidy 2004-05-02
另外,还有个问题,就是怎么样才能更新 课程安排 这个table呢?

分不是问题:)
  • 打赏
  • 举报
回复
jaidy 2004-05-02
非常感谢,我试试先~
  • 打赏
  • 举报
回复
carl2004 2004-05-02
可能在打字时有的地方打错了,请改一下,我在我机子上试了可以做出,呵呵
一时没想到更好的办法,希望有强人给出更好办法
  • 打赏
  • 举报
回复
carl2004 2004-05-02
视图:
create view view_1
as
SELECT dbo.课程安排.星期, dbo.课程信息表.课名, dbo.课程安排.班级
FROM dbo.课程安排 INNER JOIN
dbo.课程信息表 ON dbo.课程安排.课名编号 = dbo.课程信息表.课程编号 INNER JOIN
dbo.老师信息表 ON dbo.课程安排.老师编号 = dbo.老师信息表.老师编号
WHERE (dbo.课程安排.节数 = '1')

create view view_2
as
SELECT dbo.课程安排.星期, dbo.课程信息表.课名, dbo.课程安排.班级
FROM dbo.课程安排 INNER JOIN
dbo.课程信息表 ON dbo.课程安排.课名编号 = dbo.课程信息表.课程编号 INNER JOIN
dbo.老师信息表 ON dbo.课程安排.老师编号 = dbo.老师信息表.老师编号
WHERE (dbo.课程安排.节数 = '2')

存储过程:
CREATE PROCEDURE pro_kc @班级 varchar(10)
as
SELECT dbo.VIEW1.星期, dbo.VIEW1.课名 AS 第一节课, dbo.VIEW2.课名 AS 第二节课
FROM dbo.VIEW1 CROSS JOIN
dbo.VIEW2
WHERE (dbo.VIEW1.班级 = @班级)


存储过程的调用,参考SQL帮助
  • 打赏
  • 举报
回复
carl2004 2004-05-02
先建一个数据库。
create table 课程信息表
(
课程编号 int primary key,
课名 varchar(10)
)
create table 老师信息表
(
老师编号 int primary key,
名称 varchar(10)
)

以上两个表字段是可以括展的。
create table 课程安排
(星期 varchar(10),
节数 int,
老师编号 int primary key (星期,节数,老师编号)
FOREIGN KEY REFERENCES 老师信息表(老师编号),
课名编号 INT FOREIGN KEY REFERENCES 课程信息表(课程编号),
班级 varchar(10))

建立两个视图,分别按星期显示第一节课和第二节课的信息。
在视图基础上建一个存贮过程,以班级为参数,从两个视图上查课程。

前台只用调用存储过程。

招换强人有更好的方法
  • 打赏
  • 举报
回复
jaidy 2004-05-02
carl2004(忧昙) 说得甚是!
我设计的也是三张表
一张class表:
classID,班级名称,所属年级,语文老师ID,数学老师ID,……
一个teacher表:
teacherID,老师名称,所属年级,所教课程
我要问的是第三张用来存储课表的表。
其实我做的就是一个简单的系统,而且我认为一个班级一门课程只有一个老师的情况。
太复杂的不是我考虑的范围。
如果你能给我你的代码的话,我将非常感激:)
  • 打赏
  • 举报
回复
carl2004 2004-05-02
你要的话,一会给你
  • 打赏
  • 举报
回复
carl2004 2004-05-02
一般学样里的课程表不是这么简单的,一门课有可能是一个老师带,也有可能是多个老师带。
如果简单的一个表的话无法描述。
我个人认为要至少要三个表。
一个课程信息表:
课程编号,课名 主键(课程编号)

一个老师信息表:
老师编号,名称,所代课名 主键(老师编号)

课程安排:
日期,节数,老师编号,课名编号,星期,班级
主键:(日期,节数,老师编号)
外键:老师编号(老师信息表) 课名编号(课程信息表)

而你所需的表是个视图,
视图各字段为:
星期,节数(1)课名编号,节数(2)课名编号……
代码我就懒得写了。呵呵,吃饭了。
  • 打赏
  • 举报
回复
jaidy 2004-05-02
C#语言怎么写?
vb看不懂的说:(
  • 打赏
  • 举报
回复
zjcxc 元老 2004-05-02
--显示的时候就用交叉表
declare @s varchar(80000)
set @s=''
select @s=@s+',['+星期+']=max(case 星期 when '''+星期+''' then 课程名 else '''' end)'
from 课程表
group by 星期
exec('select 班级,第几节'+@s+' from 课程表
group by 班级,第几节')
  • 打赏
  • 举报
回复
zjcxc 元老 2004-05-02
班级编号 星期 第几节 课程名
  • 打赏
  • 举报
回复
相关推荐
发帖
MS-SQL Server
加入

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2004-05-02 05:29
社区公告
暂无公告