0

我正在为我的学校开发一个小程序,我对以下数据库设计有疑问。

管理员将通过在线表格将科目分配给教师。

一个主题的例子是这样的:

  • 主题字段 1:(5 年级数学:教学 5/1、5/2 和 5/3)[文本字段]
  • 学科领域 2:(6 年级数学:教学 6/2 和 6/6)[文本字段]

我根据他们的要求添加了 7 个主题字段,因为不会有任何人超过 7 个主题。

每个学科领域都需要完成一些事情,例如课程计划、课程大纲等......

每个要求将具有以下要求:

  • 语言(语言 1、语言 2 或两者)[下拉]
  • 类型(打印、文件或两者)[下拉]
  • 时间(第一学期,第二学期或两者)[下拉]

这是一个视觉

到目前为止,我已经提出了这个数据库设计:

  • ID(主要,自动递增)
  • TID(教师编号)
  • 主题1

  • 主题1要求1
  • 主题1要求2
  • 主题1要求3
  • 发送时间
  • 时间回顾

  • 主题2

  • 主题2要求1
  • 主题2要求2
  • 主题2要求3
  • 发送时间
  • 时间回顾

  • 主题3

  • 主题3要求1
  • 主题3要求2
  • 主题3要求3
  • 发送时间
  • 时间回顾

继续主题 7。

我觉得有一种更有效的方法可以做到这一点,但就是想不出更好的方法。

谢谢。

4

2 回答 2

2

如果老师的科目之间没有关系,你可以设计3个表格,如下所示

Teachers    TeacherSubjects SubjectRequirements
----------  --------------- --------------------
ID          SubjectID ----> SubjectID
TID --\     SubjectName     SubjectRequirement
Year   \--> TID             Language
            TimeSent        Type
            TimeReviewed    Time

在这样的设计中

  • 每位教师可以有多个科目(不限于7个科目)
  • 每个老师的科目有多个要求(不限于5个要求)

样本数据

INSERT INTO Teachers(ID, TID, Year) VALUES (1,'LiuYan', 2012);
INSERT INTO Teachers(ID, TID, Year) VALUES (2,'Emily',  2012);

INSERT INTO TeacherSubjects (SubjectID, SubjectName, TID) VALUES ('SubjectID_1', 'SubjectName1', 'LiuYan');
INSERT INTO TeacherSubjects (SubjectID, SubjectName, TID) VALUES ('SubjectID_2', 'SubjectName2', 'LiuYan');
-- ...
INSERT INTO TeacherSubjects (SubjectID, SubjectName, TID) VALUES ('SubjectID_N', 'SubjectNameN', 'LiuYan');

INSERT INTO TeacherSubjects (SubjectID, SubjectName, TID) VALUES ('SubjectID_N+1', 'SubjectName N+1', 'Emily');
INSERT INTO TeacherSubjects (SubjectID, SubjectName, TID) VALUES ('SubjectID_N+2', 'SubjectName N+2', 'Emily');
-- ...
INSERT INTO TeacherSubjects (SubjectID, SubjectName, TID) VALUES ('SubjectID_M', 'SubjectName M', 'Emily');

INSERT INTO SubjectRequirements (SubjectID, SubjectRequirement, Language, Type, Time) VALUES ('SubjectID_1', 'Curriculum', 'Language 1', 'Printed', 'Semester 1');
INSERT INTO SubjectRequirements (SubjectID, SubjectRequirement, Language, Type, Time) VALUES ('SubjectID_1', 'Course Syllabus', 'Language 2', 'File', 'Semester 2');
INSERT INTO SubjectRequirements (SubjectID, SubjectRequirement, Language, Type, Time) VALUES ('SubjectID_1', 'Learning Management', 'Both Language', 'Both Type', 'Both Semester');
--...

INSERT INTO SubjectRequirements (SubjectID, SubjectRequirement, Language, Type, Time) VALUES ('SubjectID_N+1', 'Curriculum', 'Language 2', 'Both Type', 'Semester 2');
--...
于 2012-07-02T08:57:25.777 回答
0

数据库的一个关键方面是在表之间建立关系(链接)——所以如果一个表(行)需要引用其他不同的东西,那么使用另一个表并与外键链接在一起——在我们的例子中是这个表TeacherSubject 是一个联结表

为了让您简要了解我将如何实现您的要求,我认为我们需要三个表,下面的 SubjectsTeacher 是连接这两个表的链接表。

您定义每个科目和教师,然后将条目添加到 TeacherSubject 表以将教师与科目相关联。

在此处输入图像描述

创建数据库:

CREATE TABLE `Subject` (
`SID` INTEGER NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(100) NOT NULL ,
`Curriculum` INTEGER NOT NULL ,
`Syllabus` INTEGER NOT NULL ,
`LearnManagement` INTEGER NOT NULL ,
`Individual Analysis` INTEGER NOT NULL ,
PRIMARY KEY (`SID`)
);

CREATE TABLE `Teachers` (
`TID` INTEGER NOT NULL AUTO_INCREMENT ,
`Name` VARCHAR(100) NOT NULL ,
PRIMARY KEY (`TID`)
);

CREATE TABLE `TeacherSubject` (
`id` INTEGER NOT NULL AUTO_INCREMENT ,
`SID_Subject` INTEGER NOT NULL ,
`TID_Teachers` INTEGER NOT NULL ,
PRIMARY KEY (`id`)
);

然后添加外键,告诉数据库您的字段是如何链接的 - 这一步很重要,因为它将确保您保持数据完整性并且不能将错误数据插入到该数据中。

ALTER TABLE `TeacherSubject` ADD FOREIGN KEY (SID_Subject) REFERENCES `Subject` (`SID`);
ALTER TABLE `TeacherSubject` ADD FOREIGN KEY (TID_Teachers) REFERENCES `Teachers` (`TID`);

然后设置几行进行测试。

 INSERT INTO `Subject` (`SID`, `Name`, `Curriculum`, `Syllabus`, `LearnManagement`, `Individual Analysis`) VALUES
    (1, 'Subject1', 1, 2, 3, 4),
    (2, 'Subject1', 1, 2, 3, 4),
    (3, 'Subject2', 1, 2, 3, 4),
    (4, 'Subject3', 1, 2, 3, 4),
    (5, 'Subject4', 1, 2, 3, 4);
INSERT INTO `Teachers` (`Name`) VALUES ('Teacher 1');
INSERT INTO `Teachers` (`Name`) VALUES ('Teacher 2');

INSERT INTO `TeacherSubject` (`id`, `SID_Subject`, `TID_Teachers`) VALUES
    (1, 1, 1),
    (2, 2, 1),
    (3, 3, 2),
    (4, 4, 2),
    (5, 1, 2);

最后找出哪个学科老师#1有:

 select * from TeacherSubject
INNER JOIN Teachers on TID=TID_Teachers
WHERE TID_Teachers=1
于 2012-07-03T06:07:38.693 回答