在SQL中创建类调度表

时间:2010-11-11 03:51:44

标签: php mysql

我需要创建一个表来存储用户的课程表。这些时间表周一至周五每天有7个街区。但是,并非所有块都填充了类。

我打算创建一个存储用户id,时间段ID,类名和每个记录中的类主题的表。如果我以这种方式实现它,那么确定用户何时没有使用PHP的类的最佳方法是什么?这有更好的布局吗?

2 个答案:

答案 0 :(得分:3)

您需要创建三个表,并建立多对多关系。

但如果你不想变得复杂,为什么不像学生一样把学生的空闲时间插入课堂,称之为“空闲时间”,那么你就可以搜索那些。

SELECT * FROM记录WHERE student_id ='0001'AND class ='free time'

否则,我不确定如果没有专门用于这些块的表,你会怎么找到一个空块。

答案 1 :(得分:3)

我不会说你需要做任何事情,但我认为你最终会发现规范化是一个非常好的主意。 http://en.wikipedia.org/wiki/Database_normalization

你可能想要表格:

student (id, name, whatever) 
course (id, name, subject/dept)
section (id, course id and time info) 
student_to_section (student id, section id)

时间取决于。你可以在部分上放置开始/结束时间(SQL时间戳或整数unix时间戳都可以),或者保留一个具有唯一id的时隙表(然后部分只有一个外键给这个id)。编辑:听起来你选择了第二种方式

至于你的空闲时间,找到学生所有部分的时间段,剩下的是空闲时间。以下将给出学生忙碌的时间段。

SELECT T.* 
FROM section S 
INNER JOIN time_blocks T on S.time_id = T.id 
INNER JOIN student_to_section STS on STS.section_id = S.id 
WHERE STS.student_id = ###

空闲时间,请使用:

SELECT T2.*
FROM time_blocks T2
WHERE T2.id NOT IN
    (put above statement here)