多对多的关系帮助

时间:2011-02-21 19:09:32

标签: sql

我在设计桌子时遇到了麻烦。

我目前的关系是代表锻炼程序和一周中的几天。我有一个常规表,一对多,有一个日表,日表是多对多的,有一个练习表。因为由不同日期和不同日期组成的例程由不同的练习组成。

表: 常规, 天, day_exercise(多对多关系的联结表), 锻炼

我遇到的问题是日间和锻炼关系,我希望有一个排序字段,以便用户必须按特定顺序进行当天的锻炼。我不能在联结表(day_exercise表)中放置一个排序字段,因为它不再是纯粹的多对多关系。另一个原因是因为MVC框架确实支持复合主键,并且为联结表创建自动增量字段是糟糕的设计。

我认为解决方案是要么我制作第三张桌子,练习排序,所以联结表将有3个主键,而不是仅仅2天和练习。这是正确的方法还是我必须重新考虑这种关系?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

如果你需要一个排序列,而且看起来你确实这样做了,那么它几乎肯定会进入存储当天每个用户练习的表格中。我期待看到一张像这样的桌子。

user_id  day  exercise_id sort_order
--
1        Mon  32          1
1        Mon  33          2
...
1        Mon  13          9
...
1        Fri  32          1
...
1        Fri  17          9
2        Mon  36          1

等等。但是我不清楚这可能是你的架构中的哪个表。我认为列(day,exercise_id)将具有对表day_exercise的外键引用。 (虽然我不确定我是否在表格中看到包含日期和练习但没有包含用户ID的内容。不是说没有一个很好的理由,只是因为我没有看到原因你发布了。)