【问题标题】:MySQL - How to add multiple values in a single columnMySQL - 如何在单个列中添加多个值
【发布时间】:2016-05-25 21:07:26
【问题描述】:

我有两个表(Subjects 和 Teachers 表)。如何将科目链接到教师,教师可以有多个科目。同样对于主题,主题可以是一周中的多天。我如何在 C# 中做到这一点?请帮忙。

【问题讨论】:

  • 我不想回答这个问题,因为我不确定它是否正确,但我认为您可以在包含教师 ID 号的主题表中添加一列。

标签: c# mysql database-design database-normalization


【解决方案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 的单个子表来处理,其中每个班级遇到一个记录。在这两种情况下,您要研究的主题都是“规范化”。

【讨论】:

  • @MatthewMoisen 你应该把它命名为对你最有意义的名字,并且与你命名其他东西的方式一致。 :)
  • 添加INDEX(subject_id, teacher_id),因为您可能也想走另一条路。
  • 不要使用CHAR,除非它们确实是固定长度的。请改用VARCHAR
猜你喜欢
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2013-08-07
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多