gpt4 book ai didi

mysql - 表结构 - 将一个学生与多个类(class) ID 联系起来

转载 作者:行者123 更新时间:2023-12-01 00:20:01 26 4
gpt4 key购买 nike

我目前正面临我设计的表格的问题(请参阅下文)。一个学生可以属于多个类(class)。后来我开始将多个值存储在一列中,以了解这是一个很大的禁忌。例如,class_id 在存储以逗号分隔的值时面临类型丢失和变成字符串的问题。我已经阅读了制作文章,它指示制作两个表格,一个用于类(class),另一个用于学生,但不确定如何插入基本上将学生链接到多个类(class)的数据。什么是最好的方法?

当前方法:

------------        ----------      ------------    -------------
student_fname student_id class_name class_id
------------ ---------- ------------ -------------
james Vre94b3JpXO math,science 5697,5768
jim JzqQ2zRVNm1 art, music 7604,7528
jenny xgqv9P42eYL physical-ed 6422
kyle QLNM0Wbyqk0 computer,jrotoc 6315,8797
kimberly P2egAddWN0Q culinary-arts 8069
kayla EGNDjWAreAy science, art 5768,7604
noah bPeOyMMONGr math, music 5697,7528
nataly 9Op53GGmqk5 jrotc 8797

建议的方法:

------------        ----------
class name class id
------------ ----------
math 5697
science 5768
computer 6315
physical-ed 6422
music 7528
art 7604
jrotc 8797
culinary-arts 8069

------------ ----------
student fname student id
------------ ----------
james Vre94b3JpXO
jim JzqQ2zRVNm1
jenny xgqv9P42eYL
kyle QLNM0Wbyqk0
kimberly P2egAddWN0Q
kayla EGNDjWAreAy
noah bPeOyMMONGr
nataly 9Op53GGmqk5

最佳答案

解决方案是引入第三个表作为两个域表之间的连接点。该表将包含对其他表的主键的外键引用(加上特定于该关系的任何数据,例如注册日期等)。

Class table:
class name class_id (primary key)
------------ ----------
math 5697
science 5768

Student table:
student fname student_id (primary key)
------------ ----------
james Vre94b3JpXO
jim JzqQ2zRVNm1

Enrollment table:
student_id (fk to stud.) class_id (fk to class)
------------ ----------
Vre94b3JpXO 5697
JzqQ2zRVNm1 5697
JzqQ2zRVNm1 5768

在最后一个表中,您将使用复合或复合主键来确保唯一性。 (不同之处在于复合 pk 还会包括其他列 - 例如日期或学期,这将允许学生在不同的场合参加同一个类)。

要查询数据,您可以在键上连接表:

select * 
from student s
join enrollment e on s.student_id = e.student_id
join class c on c.class_id = e.class_id

如果您想了解更多相关信息,请在关系数据库 的上下文中搜索数据库规范化范式

这是一个 small demo .

关于mysql - 表结构 - 将一个学生与多个类(class) ID 联系起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32660125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com