数据库架构和逻辑

时间:2013-08-20 14:50:18

标签: mysql database

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

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 WeekLesson of DayDurationSubjectRoomTeacher等等。在此示例中,您的主键为(Day of Week, Lesson of Day)

这样,如果您想要特定日期的日程安排,只需选择Day of Week = 2的所有内容即可获得星期二的日程安排。

  

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

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

  

真的需要关于如何启动它的逻辑(即我应该使用哪种数据类型)

使用最直观的类型。当您存储号码时选择integer,当存储几个字符时选择varchar(n),当使用大量字符时使用text等等...

答案 3 :(得分:0)

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

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