2010-11-11 26 views
0

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

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

回答

2

你需要做三个表,并成立了许多一对多的关系。

但是,如果你不想得到真正复杂的,为什么不直接插入了学生的自由时间像一类,称之为“自由时间”,那么你可以搜索这些。

SELECT * FROM记录,其中student_id数据=“0001”和class =“自由时间”

否则,我不知道你是怎么找到一个空块,而无需专门的块表。

+0

对不起,我忘了提,我有一个定义块另一个表。 – nickles 2010-11-11 04:23:30

+0

这是我发现有帮助的教程。 http://www.tonymarston.net/php-mysql/many-to-many.html – dgig 2010-11-11 04:38:22

+0

+1空闲时间作为一个类,因为那么你可以运行它的计算(总,平均等),你不能如果你可以像其他答案一样忽略它 – Drew 2010-11-11 06:32:00

2

我wouldnt说你需要做什么,但我认为你最终会发现正火这里是一个非常好的主意。 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时间戳都可以)或者保留一个带有唯一标识的时隙表(然后节只有这个标识的外键)。编辑:听起来像是你所选择的第二种方式

至于你的空闲时间,找到一个学生采取的所有部分的时间周期和自由的时间是什么就走了。以下内容将给出学生忙碌的时间段。

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)