嗨,我是一名学生,正在学习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个学生条目中。 知道怎么做吗?如果不可能的话,您会推荐什么?
答案 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列。