单课程讲座调度的数据库设计

时间:2013-06-22 08:52:36

标签: mysql database-design normalization database-performance

我想将讲座时序信息存储在第三个规范化数据库中。 讲座信息的ER图如下:

ER Diagram of the Lecture Info.

由于Lecture_Day是多个值属性,所以我按如下方式设计了数据库:

LectureTimeTable:

_ID | Lecture Start Time | Lecture End Time | Lecture Loaction | Course ID FK

LectureDayTable:

_ID | Lecture Time ID FK | Course ID FK | Lecture Day

创建这些表的查询如下:

CREATE TABLE lectureTimeTable (
_id INTEGER, 
startTime TEXT NOT NULL, 
endTime TEXT NOT NULL,
course_ID_FK INTEGER, 
FOREIGN KEY (course_ID_FK) REFERENCES CourseTable(_id), 
PRIMARY KEY (_id, course_ID_FK) 
);

CREATE TABLE lectureDayTable (
_id INTEGER, 
classDay INTEGER NOT NULL, 
classTime_ID_FK INTEGER, 
course_ID_FK INTEGER, 
FOREIGN KEY (course_ID_FK, classTime_ID_FK) 
REFERENCES lectureTimeTable(course_ID_FK, _id),
PRIMARY KEY (_id, classTime_ID_FK, course_ID_FK)
);

现在,用户通过提供讲座位置,开始时间,结束时间和讲座日来为课程添加新的时间表。我将这些信息分别添加到表中,如下所示:

INSERT INTO lectureTimeTable VALUES (1, "12:00", "1:00", 1);

// and for inserting the days i am using a for loop as follows, Here the
for(i=0; i<=selectedDays.length();i++){
INSERT INTO lectureDayTable VALUES (1, selectedDays[i], 1, 1);
}

我在添加/检索这些表中的数据时遇到了麻烦,所以我只想确保我的数据库设计不错。

感谢。

1 个答案:

答案 0 :(得分:2)

Database Design

您可以设计一个名为timetable的表,此表可以保存您的每周计划。您可以使用2维时间块和教室进行完整填充。这使您可以在屏幕上打印计划而无需计算网格。网格已经预先加载到表中。然后,从lecture表中,您可以将它们分配到timetable