【发布时间】:2016-05-25 21:07:26
【问题描述】:
【问题讨论】:
-
我不想回答这个问题,因为我不确定它是否正确,但我认为您可以在包含教师 ID 号的主题表中添加一列。
标签: c# mysql database-design database-normalization
【问题讨论】:
标签: c# mysql database-design database-normalization
通常的解决方案是创建一个中间表或“交叉实体”。
您正在尝试在科目和教师之间建立多对多关系,因为每个教师可以教授多个科目,而多个教师可以教授同一科目。为了解决这个问题,您创建一个交集表,为了论证,我们可以调用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 的单个子表来处理,其中每个班级遇到一个记录。在这两种情况下,您要研究的主题都是“规范化”。
【讨论】:
INDEX(subject_id, teacher_id),因为您可能也想走另一条路。
CHAR,除非它们确实是固定长度的。请改用VARCHAR。