我正在尝试为MySQL中的类创建时间表。列是一周中的几天,行是时间间隔(即7:00 - 8:00)。我也试图有30分钟的时间间隔,当一个特定的主题是2小时时,它将跨越4行。每个单元格包含课程和房间的名称。这是我正在努力开发的一个小程序的一部分。到目前为止,我知道要插入哪些数据,但我仍然坚持创建正确的数据库模式。真的需要关于如何开始这个的逻辑(即我应该使用什么数据类型)。谢谢!
答案 0 :(得分: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所说,数据库并不完全是电子表格。
希望这是有道理的。
答案 1 :(得分:0)
您可以为一天设置一列(您可以设置从1到7的天数),一列用于开始时间,一列用于完成时间。这样您的查询就会变得更简单。
示例:
Day | Start | Finish
-----------------------------
1 8:30 12:00
1 13:00 15:00
当你不想坚持30分钟时,这也会派上用场。
答案 2 :(得分:0)
列是一周中的几天,行是时间间隔(即7:00 - 8:00)
这是一个糟糕的开始。您的列应该是单个课程的属性,您的行应该是一周中所有不同的课程。
您的列可以是Day of Week
,Lesson of Day
,Duration
,Subject
,Room
,Teacher
等等。在此示例中,您的主键为(Day of Week, Lesson of Day)
。
这样,如果您想要特定日期的日程安排,只需选择Day of Week = 2
的所有内容即可获得星期二的日程安排。
每个单元格包含课程和房间的名称。
这也违反了正常化的规律。每个“单元格”应始终不超过一个值。
真的需要关于如何启动它的逻辑(即我应该使用哪种数据类型)
使用最直观的类型。当您存储号码时选择integer
,当存储几个字符时选择varchar(n)
,当使用大量字符时使用text
等等...
答案 3 :(得分:0)
我会以这种方式创建它,使其标准化,并提供更多机会进一步扩展此应用程序。 表(属性):
timeslots(id, start_time, end_time)
subjects(id, name)
timetable(timeslot_id, subject_id)