答案 0 :(得分:1)
通常的解决方案是创建一个中间表或交叉实体。"
您正试图在主题和教师之间创建多对多关系,因为每个教师可以教授多个主题,而多个教师可以教授相同的主题。为了解决这个问题,你需要创建一个交集表,为了参数,我们可以调用Teaches
。您的架构如下所示:
CREATE TABLE teachers
(
id CHAR(10) PRIMARY KEY,
name VARCHAR(255)
-- more fields
);
CREATE TABLE subjects
(
id CHAR(10) PRIMARY KEY,
name VARCHAR(63)
-- more fields
);
CREATE TABLE teaches
(
teacher_id CHAR(10) FOREIGN KEY REFERENCES teachers (id),
subject_id CHAR(10) FOREIGN KEY REFERENCES subjects (id),
PRIMARY KEY (teacher_id, subject_id)
);
这会将您的多对多关系转换为一对一对多的关系。
您的第二个问题,即每个主题每周多个课程的问题,最容易使用classes
的单个子表来处理,每个阶段遇到一个记录。在这两种情况下,您要研究的主题是"标准化。"