SQL-如何将表B的多个ID存储到表A中?

时间:2018-09-20 06:21:24

标签: php mysql sql

嗨,我是一名学生,正在学习SQL。 我有学生表和科目表

-Student(ID,name,subjects)
(1,testing,here is the id of multiple subject)

-Subjects (ID,name,Desc)
(1,Subject1,somedesc)
(2,Subject2,somedesc)
(3,Subject3,somedesc)
(4,Subject4,somedesc)

所以我想将科目的多个条目存储到1个学生条目中。 知道怎么做吗?如果不可能的话,您会推荐什么?

2 个答案:

答案 0 :(得分:1)

我不建议您使用当前的方法,因为您正在尝试将逗号分隔的,非规范化的数据存储在Student表中,该表中有一条记录包含CSV主题列表。如果有人使用此设计为您提供准确的答案,则查询将非常难看且效率低下。相反,我建议使用以下模式:

Student (ID, name)    -- and maybe other student metadata
Subjects (ID, name, description)
Student_Subjects (ID, StudentID, SubjectID)

在这里,我们使用表Student_Subjects中的多行存储一名学生与其科目之间的关系。顺便说一下,Student_Subjects通常被称为“连接”表或“桥”表,因为它以一种干净且规范化的方式连接两种类型的数据。

现在,如果要保留给定学生的学科,则可以使用单个插入内容,例如:

INSERT INTO Student_Subjects (StudentID, SubjectID)
VALUES
    (1, 1),
    (1, 2),
    (1, 3),
    (1, 4);

答案 1 :(得分:0)

您可以使用外键约束。在您的示例中,将Student作为父表,将Subjects作为子表。

Student (id, name)
Subjects (id, student_id, name, desc)

Student表中引用主题的外键是Subjects表中的student_id列。