我有一个类似udemy的网站,我有五个主题
还有五个叫类的
每节课都与这五门学科有关系。 在那里,教师可以根据自己的选择上传视频到这些科目中的任何一个。 例如,他想在class9'中上传
physics
的视频。 教师与学科,班级也有关系。 我已经为这个数据库考虑了一天多,但结果是这样的。 我为每堂课制作了五张单独的表格,所有表格包含五个科目
请建议一个好的数据库模型
为类,科目和教师创建一个表。 类似于:
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));
如果一个科目在一个班级中只能由一名教师讲授,请在主键中包括教师
。
还要创建一个表格,将视频链接到一个班级和主题。
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
的(class,subject,teacher)
设置唯一约束(除非(class,subject,teacher)
已经是主键,这意味着它是唯一的),在class_subject_video
中添加teacher
列,并将外键从(class,subject)引用class_subject(class,subject)
更改为(class,subject,
如果视频不应该链接到一个课程中的某个主题,而应该只链接到一个一般的主题,那么不要创建链接视频到一个课程和主题的表,而是创建一个链接视频到一个主题的表。
CREATE TABLE subject_video
(subject integer,
video integer,
PRIMARY KEY (subject,
video),
FOREIGN KEY (subject)
REFERENCES subject
(id),
FOREIGN KEY (video)
REFERENCES video
(id));
你应该有个主意了。 可以根据需要修改数据类型和对象名称。 如果需要,请添加其他列。 等等。