如何使这种多对多关系有效?

时间:2019-03-17 16:22:37

标签: javascript database join database-design

我有一个练习表。我希望能够在我的React应用程序中创建锻炼,然后将其提交到数据库。但我一直在努力思考架构的工作方式。我该如何实现?

我实质上希望锻炼是一系列锻炼。但是我知道在数据库中存储数组不是最好的主意

但是我不明白如果我先有一个运动表,然后又有一个运动表,如何将它们结合在一起,制成一个有运动表的锻炼表

我希望能够进行一次独特的锻炼,这将为我提供该锻炼的锻炼清单以及日期和其他信息。

我能看到的唯一方法是:

id: 1, name: 'my first workout', exercises: [array of objects]

有什么想法可以看到这种模式吗?

1 个答案:

答案 0 :(得分:0)

对于多对多关系,您应该有第三个表来存储关系,该表称为连接表。例如,在您的情况下,每行将有一个exerciseID和一个workoutID,这意味着两个(锻炼和锻炼)是相关的。

因此,例如,该表中可以有许多行,其中有exerciseID = 1(不同的workoutID)和许多行中的workoutID = 5(不同的exerciseID),因此很多对多。

更多说明


联结表的每一行都有三个字段:

  • 它自己的id(因为在数据库中,每个表都具有一个id,无论如何都是一种好习惯)
  • ExerciseID
  • 锻炼ID

例如,假设我们有一个这样的联结表:

ID      ExerciseID    WorkoutID
-------------------------------
1000    12            5
1001    12            6
1002    12            9
1003    12            12
1004    12            27
1005    13            2
1006    13            6
1007    13            9

这意味着:

  • 锻炼编号12有锻炼[5, 6, 9, 12, 27]
  • 锻炼编号13有锻炼[2, 6, 9]

但是关于如何创建此表:

您可以使用用户界面来添加,编辑和删除练习和锻炼,也可以自己操作。无论哪种方式,任何定义锻炼或锻炼方式的人都必须知道它们之间的关系!因此,他们还可以将该关系定义为联结表中的一行