Neeps数据库学习

     昨天和今天,我研究了下Neeps数据库,复习了一下Sql语句的查询操作,发现自己还有蛮多疑惑,有待今后巩固加强!下面简单介绍下这个数据库和自己在学习过程中的心得体会。 "Neeps"数据库包含了Napier大学计算机学院2000/2001 学年的第一学期所有教学事件的详细信息。

staff表描述了教职员工的基本信息,包括的字段有组合ID,以及组合姓名,因为一个教学活动可能由多个教师来完成 ,这样描述既合乎常情,又能够减少数据的冗余。其中主键是员工ID.

student表描述了学生的基本信息,包括的字段有学生的ID,班级名称,班级规模,以及所在班级所属年级,这里学生的ID是指学生年级与所在班级的组合,如我们平常所说的2005级数据库6班,而班级名称则是课程名称与班号的组合,如平常我们所说的数据结构1班。主键是学生ID.

room表描述了教室的基本信息,包括的字段有教室ID,教室名称,容量(座位数),以及所属的教室组合,这所以有这么一个字段,我个人认为是通过查询教室信息进而查询这个教室是进行哪个教学活动,有没有和其他教学活动冲突。

event表是整个数据库最核心的一张表。通过它,可以描述整个教学过程中的所有事件。包括的字段有事件ID,由学科名称和教学种类及班号(教学T01还是演讲L01)所组合而成,学科ID,教学种类(T/L),星期,活动开始时间,持续时间以及所在教室。

modle表描述课程的基本信息。包括的字段有课程ID以及课程名称。

week表描述了教学周的开始时间信息。包括的字段有教学周ID,教学周开始日期。

attends是用于建立学生与教学事件之间多对多联系的连接表,包括的字段有学生ID,事件ID.

teaches是用于建立教师与教学事件之间多对多联系的连接表,包括的字段有教师ID,事件ID.

occurs用于建立教学事件与事件所在日期之间的多对多联系,包括事件ID以及教学周ID。

这个数据库设计最大的亮点和巧妙之处就在于对于教学事件时间信息的设计。在event表里面我们只能查询到事件发生的星期,开始时间以及持续时间,这也符合我们日常的教学习惯。我们一般问星期几有什么课,在哪里上,什么时候开始,上课时间持续多长。但是光这样设计还是不够的,仔细想想就明白了。因为课并不是每个教学周都上,它只发生在某些教学周。所以就有了occurs这张表的存在,它建立了教学事件与教学周之间的对立关系。但是为了进一步了解到每个教学周的开始时间,我们又设计了一张数据表week。这样整个教学事件发生的时间就这样一步一步被完整的描述出来了!

下面的关于这个数据库的练习,给出了部分参考答案,不知道大家有没有更好的写法。

  • 通过ER图和表数据读懂该数据库的表与表之间的关系,本数据库主要用途是用来安排教学活动的,包含了教师、学生集体和教学活动、教室、课程、课时的关系
  • 找出安排给某个教学活动的教室名(例如编号为co42010.L01的教学活动)。
  • Select name
    from room join event
    on room.id=event.room
    where event.id='co42010.L01'

  • 找出中某课程所包含的所有教学活动发生的日期,时间和地点。(例如编号为co72010的课程)
  • select wkstart,dow,tod,duration,room
    from modle join event
    on modle.id=event.modle
    join occurs
    on event.id=occurs.event
    join week
    on week.id=occurs.week
    where modle.id='co72010'

  • 找出某课程对应的教学活动中所有教师的集合(例如编号为co72010的课程)。
  • select staff.id,staff.name
    from event join teaches
    on event.id=teaches.event
    join staff
    on staff.id=teaches.staff
    where modle='co72010'

  • 列出星期三使用cr.132 教室的教师和教学活动,包括教学活动发生的时间(精确到小时)。
  • select staff.name,event.id,modle.name,wkstart,dow,tod,duration
    from event join teaches
    on event.id=teaches.event
    join staff
    on staff.id=teaches.staff
    join occurs
    on event.id=occurs.event
    join week
    on week.id=occurs.week
    join modle
    on event.modle=modle.id
    where room='cr.132'and
    dow='Wednesday'

  • 列出参与某课程教学活动的学生集合。(例如名称为"Database"的课程)
  • select modle.name,student.id,student.name
    from modle join event
    on modle.id=event.modle
    join attends
    on event.id=attends.event
    join student
    on student.id=attends.student
    where modle.name='Multimedia Technology'

  • 给出某课程所含教学安排中应出席每次教学活动的学生人数(例如编号为co72010的课程)。
  • select count(student.id)
    from modle join event
    on modle.id=event.modle
    join attends
    on event.id=attends.event
    join student
    on student.id=attends.student
    where modle.id='co72010'

  • 统计出每门研究生课程的教师队伍人数和具体教学人员名称,从编号为co7开始的课程是研究生课程("post-graduate")。
  • select staff.name,count(staff.name) as number
    from modle join event
    on modle.id=event.modle
    join teaches
    on event.id=teaches.event
    join staff
    on staff.id=teaches.staff
    where modle.id like 'co7%'
    or modle.id like 'coA%'
    or modle.id like 'coh%'
    group by staff.name

  • 找出教学活动持续总时间小于10周的课程名称。
  • select distinct(modle.name)
    from modle join event
    on modle.id=event.modle
    join occurs
    on event.id=occurs.event
    join week
    on week.id=occurs.week
    where event.id in
    (select occurs.event
    from occurs
    group by occurs.event
    having count(occurs.event)>=10)

    根据事件ID和教学周ID查询教学事件发生的详细时间

    Create procedure gettime
    @event varchar(20),
    @week char(2)
    as
    select wkstart,dow,tod,duration
    from event join occurs
    on event.id=occurs.event
    join week
    on occurs.week=week.id
    where @event=event
    and @week=week

    exec gettime 'co12004.L01','01'

  • 看看有哪些教学活动和某个课程的教学活动同时开始?(例如编号为co72010的课程)
  • 哪些老师有比平均情况更多的时间用来沟通?
  • 假如某教师有事情,他的所有教学活动都将被转移给另外一位老师,请标识出会发生冲突的教学活动(例子:假设现在co.ACg负责的所有教学都将被转移给co.CHt来负责)。
  • 创建一张表,为所有能容纳60人以上的教室显示出它们各自的利用率和被占用级别。
  • 将耗时1个小时的教职工会议拟在早晨9点至下午5点之间举行,所有将冲突的教学活动都会被取消,请标识出会造成最小课程中断的那个小时。
  • 找所有的教学冲突 - 包括教学活动冲突和老师、学生或者他们有相同的教室。
  • 为第一周所有时间都安排满的学生班级生成一张时间表。
  • posted @ 2009-09-13 13:59  美梦成真  阅读(449)  评论(0编辑  收藏  举报