如何为出勤管理系统数据库设计架构/结构?

时间:2016-02-14 06:20:38

标签: database database-design

我打算为我的大学开设一个考勤门户网站。我已经尝试但是没有成功设计一个高效的数据库。它必须能够记录所有科目,所有班级等的出勤率。 任何线索都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

Class --< Lecuture --< Attendance >-- Student

Class有多个Lectures,每个Lecture只属于一个Class

每个Student会参加许多Lectures,每个Lecture会有很多Students参加。

CREATE TABLE class (
    class_id INT,
    class_name VARCHAR(100),
    CONSTRAINT class_id_pk PRIMARY KEY (class_id)
);
CREATE TABLE lecture (
    lecture_id INT,
    class_id INT,
    lecture_dt DATE,
    CONSTRAINT lecture_id_pk PRIMARY KEY (lecture_id),
    CONSTRAINT lecture_class_id_fk FOREIGN KEY (class_id) REFERENCES class (class_id)
);
CREATE TABLE student (
    student_id INT,
    student_first_name VARCHAR(20),
    student_last_name VARCHAR(20),
    CONSTRAINT student_id_pk PRIMARY KEY (student_id)
);
CREATE TABLE attendance (
    lecture_id INT,
    student_id INT,
    attendance_present INT CHECK (attendance_present in (0,1)),
    CONSTRAINT attendance_pk PRIMARY KEY (lecture_id, student_id),
    CONSTRAINT att_lecture_id_fk FOREIGN KEY (lecture_id) REFERENCES lecture (lecture_id),
    CONSTRAINT att_student_id_fk FOREIGN KEY (student_id) REFERENCES student (student_id)
);

要在学生和讲座之间建立M:N关系,请创建名为association table的{​​{1}}。请注意,attendance的主键是attendancelecture_id,并且这两个字段都有外键返回各自的表。

如果您的数据库具有布尔数据类型,则可以将其用于student_id。值为False / 0表示学生错过了讲座。值为True / 1表示学生参加。如果您想存储它,也可以包含attendance_present

实际上,这还需要一个on_time表,其中Teacher表示多对多。可能还需要一个Class(或主题)表,其中一个对多Course。还可能有一个Class表,其中包含一对多Semester。一个班级也可以有一个学生列表,因此一个Course关联表是好的。

ClassList