2013-08-20 164 views
0

我想创建一个在MySQL中的类的时间表。列是一周的日子,行是时间间隔(即7:00 - 8:00)。我也试图有30分钟的时间间隔,当某个特定主题是2小时时,它将跨越4行。每个单元格包含课程和房间的名称。这是我试图发展的一个小程序的一部分。到目前为止,我知道要插入哪些数据,但我坚持创建正确的数据库模式。真的需要关于如何让这个开始的逻辑(即我应该使用哪些数据类型)。谢谢!这个数据库模式和逻辑

+2

数据库表不是电子表格。星期一7:00-8:00之间可存储的内容与星期五7:00-8:00存储的内容之间没有任何区别。两个项目都应该存储在同一列中。这将指向一列存储日期和另一存储时间跨度,并且最后一列存储“在该时间段内当天发生的事情”。 –

+0

@Damien_The_Unbeliever我已经完成了用上面提到的那个数据库设计插入所有的数据。然后我试图用HTML显示时间表格式的数据。 – JKTA

回答

1

请问这个声音:

CREATE TABLE TimeTable (
    ID int(8) NOT NULL AUTO_INCREMENT, 
    Subject varchar(32) NOT NULL, 
    Room varchar(8) NOT NULL, 
    StartTime datetime NOT NULL, 
    EndTime datetime NOT NULL, 
    Day enum('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday') NOT NULL, 
    PRIMARY KEY (ID) 
); 

你只存储有关数据这个科目。

您提到的其他内容实际上取决于您用来输出数据的任何语言。你不能真的把时间间隔放在数据库中间。正如Damien_The_Unbeliever所说,数据库并不完全是电子表格。

希望这是有道理的。

+2

你可以有一个复合主键而不是'ID'字段:'(StartTime,Day)'。 –

+0

是的,你说得对。我试图用HTML输出时间表,我认为它足够灵活来处理这种表格。谢谢! – JKTA

+0

@Cobra_Fast很好的+1,但作为一个侧面说明这个PRIMARY KEY是每个记录12或13个字节大。如果您使用存储引擎InnoDB,它会将固定索引(本例中为PRIMARY KEY)数据添加到每个二级索引。这也是为什么InnoDB查找二级索引和MyISAM更快的原因,但它需要更多的磁盘空间和更大的缓冲池。 –

0

您可以为一天设置一列(您可以设置从1到7的天数),一列用于开始时间,一列用于结束时间。这样你的查询将变得更加简单。

例子:

Day | Start | Finish 
----------------------------- 
1  8:30   12:00 
1  13:00  15:00 

这也会派上用场,当你不想坚持了30分钟。

0

列是星期几,并且各行时间间隔(即7:00 - 8:00)

这是一个糟糕的开局。您的专栏应该是单个课程的属性,并且您的行应该在整个星期内成为所有不同的课程。

你列可能是Day of WeekLesson of DayDurationSubjectRoomTeacher,等等。在这个例子中,你的主键是(Day of Week, Lesson of Day)

这样,如果您想要某个特定日子的日程安排,您只需选择一切与Day of Week = 2以获得周二的日程安排。

每个单元格包含课程和房间的名称。

这也违反了规范化的规律。每个“单元格”应始终具有不超过一个值。

真的需要如何得到这个开始(即我应该用什么数据类型)

用最直观的类型的逻辑。当存储了一些选择integer,当存储几个字符选择varchar(n),使用大量文字时使用text等等...

+0

感谢您的想法。 '我的意思是'列是一周的日子......'是可以使用HTML完成的显示。这不一定是MySQL表格的格式。对不起,如果问题很混乱。 – JKTA

0

我会以这种方式创建它,并在此处进行规范化处理,并为进一步扩展此应用程序提供更多机会。 表(属性):

  1. timeslots(id, start_time, end_time)
  2. subjects(id, name)
  3. timetable(timeslot_id, subject_id)
+0

链接表是不必要的。时间段中没有足够的变化来证明这些使用的合理性。 – ninty9notout

+1

但是,在这种使用情况下,可能没有必要使用更复杂的用例,但1表数据库(电子表格样式)可能不够用。这只是为了迎合未来的扩张,它现在可能不是最好的。 – Jianhong