首页 > 解决方案 > 需要对数据库模型的建议

问题描述

我有一个类似 udemy 的网站,里面有五个科目

并有五个名为

每个班级都与这五个科目有关系。老师可以根据自己的选择将视频上传到这些科目中的任何一个。例如,他想为physicsin上传视频class9。老师也与学科和班级有关系。我已经为这个数据库考虑了一天多,但结果却是这样。我为每个班级制作了五个单独的表格,所有表格都包含五个科目

请推荐一个好的数据库模型

标签: mysql

解决方案


为班级、科目和教师创建一个表格。就像是:

CREATE TABLE class
             (id integer AUTO_INCREMENT,
              name varchar(64),
              PRIMARY KEY (id));

CREATE TABLE subject
             (id integer AUTO_INCREMENT,
              name varchar(64),
              PRIMARY KEY (id));

CREATE TABLE teacher
             (id integer AUTO_INCREMENT,
              givenname varchar(64),
              surname varchar(64),
              PRIMARY KEY (id));

还为视频创建一个表。包括上传它的老师。

CREATE TABLE video
             (id integer AUTO_INCREMENT,
              title varchar(64),
              content varbinary(65535),
              uploader integer,
              PRIMARY KEY (id)
              FOREIGN KEY (uploader)
                          REFERENCES teacher
                                     (id));

然后创建一个将科目链接到班级的表格。包括在课堂上教授该科目的老师。

CREATE TABLE class_subject
             (class integer,
              subject integer,
              teacher integer,
              PRIMARY KEY (class,
                           subject),
              FOREIGN KEY (class)
                          REFERENCES class
                                     (id),
              FOREIGN KEY (subject)
                          REFERENCES subject
                                     (id),
              FOREIGN KEY (teacher)
                          REFERENCES teacher
                                     (id));

如果一门学科只能由一位老师在课堂上讲授,则包括teacher在主键中。

还要创建一个表格,将视频链接到课程和主题。

CREATE TABLE class_subject_video
             (class integer,
              subject integer,
              video integer,
              PRIMARY KEY (class,
                           subject,
                           video),
              FOREIGN KEY (class,
                           subject)
                          REFERENCES class_subject
                                     (class,
                                      subject),
              FOREIGN KEY (video)
                          REFERENCES video
                                     (id));

如果只允许教师将视频分配给一个班级和科目,并且他们还为该班级教授该科目,则您需要对(class, subject, teacher)of设置一个唯一约束class_subject(除非(class, subject, teacher)已经是暗示它是唯一的主键),添加一个teacherclass_subject_video并将外键从 更改(class, subject) REFERENCES class_subject (class, subject)(class, subject, teacher) REFERENCES class_subject (class, subject, teacher)

如果视频不应链接到课程中的主题,而只能链接到一般主题,请不要创建将视频链接到课程和主题的表格,而是创建将视频链接到主题的表格。

CREATE TABLE subject_video
             (subject integer,
              video integer,
              PRIMARY KEY (subject,
                           video),
              FOREIGN KEY (subject)
                          REFERENCES subject
                                     (id),
              FOREIGN KEY (video)
                          REFERENCES video
                                     (id));

那应该给你一个想法。可能根据您的需要修改数据类型和对象名称。如果需要,添加其他列。等等。


推荐阅读