Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库设计需要更好的多对多解决方案_Mysql_Sql_Database - Fatal编程技术网

Mysql 数据库设计需要更好的多对多解决方案

Mysql 数据库设计需要更好的多对多解决方案,mysql,sql,database,Mysql,Sql,Database,我有一张像这样的桌子: classes:id,time_instructor_id instructors:id,name 我希望每个讲师都有一个或多个课程,这与我目前的设计很好 如果将来有一名讲师离职,另一名讲师可以替代该讲师,我如何将课程分配给新的讲师 我在想,在这种情况下,我是否可以有一个N:N表 您的意见是什么?是的,您可以创建第三个名为classes\u instructors的表(这可能取决于框架约定),该表将有两个属性,可能是第三个,用于显示它是否处于活动状态 id class

我有一张像这样的桌子:

classes:id,time_instructor_id

instructors:id,name
我希望每个讲师都有一个或多个课程,这与我目前的设计很好

如果将来有一名讲师离职,另一名讲师可以替代该讲师,我如何将课程分配给新的讲师

我在想,在这种情况下,我是否可以有一个N:N表


您的意见是什么?

是的,您可以创建第三个名为classes\u instructors的表(这可能取决于框架约定),该表将有两个属性,可能是第三个,用于显示它是否处于活动状态

id
class_id
instructor_id
active

这是通过联接表使用多对多关系的非常常见的模式。有些人倾向于称之为关联表或实体。

您没有问题。如果一名讲师离开,另一名讲师加入并接管了第一名讲师的课程,您只需使用新讲师的id更新这些课程的
讲师id
值即可

您不需要多对多表,除非您希望能够为每堂课分配多个讲师


您的要求是否比问题中所述的更多?

您是正确的,使用联接表的多对多关系在这里是合适的。@willOEM我不同意;我想你得出了一个关于多对多的结论。严格阅读问题,然后由拉里·卢斯蒂格阅读。@BasilBourque:我不同意,原因正是你在对公认答案的评论中陈述的。更好地支持M:M场景,并提供必要的控制约束,而不是假设现实中可能的场景永远不会发生。严格地说,直接回答问题中定义的需求,这个答案是正确的。实际上,对于现实世界中的此类项目,您可能会有多个讲师共同授课的情况,或者您可能会决定跟踪更换教师的历史。然后你有一个多对多的关系,因此需要第三个表
教学
来桥接。你是对的,一个“现实生活”的实现很可能有很多需求,这些需求在最初的问题中没有出现,但没有这些需求,我总是选择最简单的解决方案。如果添加了这些需求,重构以提供一个中间表并不困难。我完全理解并支持您所做的工作:严格遵循前面提到的问题。我只是添加了一条评论,以便其他读者能够理解为什么你的答案与其他答案之间存在差异。