gpt4 book ai didi

mysql - 如何将具有两个不同主键的两个表连接到另一个表中?

转载 作者:行者123 更新时间:2023-11-29 11:36:28 24 4
gpt4 key购买 nike

我有两个表:studentscourses,假设每个学生可以参加多个类(class),并且每个类(class)可以有多个学生。

[Table Students]             [Table Courses]
id(PK) id(PK)
name name
age duration
etc... etc...

我想要做的是将两个表关联到另一个表,例如学习,我将在其中存储每个学生正在学习的类(class)。像这样:

[Table studying]
idStudent
idCourse

我推断出的内容

我认为 idStudentidCourse 应该是外键,因为它存储在 studentscourses 中的信息> 分别具有唯一的主键并尊重数据库的一致性。如果没有学生和类(class)的信息,或者仅仅没有其中之一的信息,就不可能存在一种关系。

我还知道某些表有两个主键,以便表中可以存在多个主键的重复值,但不能同时存在两个主键。

我的问题

  • 这些 ID(idStudentidCourse)。必须是主键还是外键?
  • studying 表是否应该有另一列带有 ID 的列?
  • 我的推论正确吗?

P.S:我不需要sql语句,我只需要帮助来澄清我的困惑。

提前致谢!

最佳答案

These ids (idStudent, idCourse). Have to be primary keys or foreign keys?

您希望它们成为外键,因为第三个表中每条记录的存在取决于第一个表的可用性,也就是说,如果没有“学生类(class)”或“学生类(class)”,则不可能存在“学生类(class)”或“学生类(class)”类(class)或学生。它可以(如果你不制作这些 key )但你会破坏 referential integrity

另一方面,拥有 FK 通常是一件好事,因为您可以确保不会错误地删除可靠的记录(这首先是约束的目的),除非您执行了类似 cascade deleting 的操作。

Should the table studying has another column with an ID?

不,不必这样做,但有时这是一个很好的做法,因为某些软件(例如对象关系映射器、图表软件等)可能依赖于这样一个事实:它们总是需要一个约定 em> 主键。其他一些甚至不支持复合键,因此虽然不是强制性的,但它可以在将来有所帮助,而且不会造成伤害。当然,这一切都取决于您使用数据库的目的和方式(纯 SQL、您使用哪个引擎、是否与框架一起使用等)

Is my deduction in the good way?

一切都是相对的。但我觉得你的逻辑很好。我的建议是,您始终尽可能灵活地设计数据模式,因为如果项目不断增长,以后进行这些更改就会变得更加困难(并且成本更高)。花时间思考如何扩展应用程序功能,并思考架构是否会适应它。

关于mysql - 如何将具有两个不同主键的两个表连接到另一个表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36503693/

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