0

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

4

4 回答 4

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等等......

于 2013-08-20T14:58:05.250 回答
0

我会以这种方式创建它,使其标准化并提供更多机会进一步扩展此应用程序。表(属性):

  1. timeslots(id, start_time, end_time)
  2. subjects(id, name)
  3. timetable(timeslot_id, subject_id)
于 2013-08-20T15:00:33.770 回答
0

这听起来如何:

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 所说,数据库并不完全是电子表格。

希望这是有道理的。

于 2013-08-20T14:58:48.613 回答
0

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

例子:

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

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

于 2013-08-20T14:56:13.797 回答