带有多个引用的mysql外键

时间:2012-07-22 01:20:33

标签: mysql foreign-keys rdbms

我正在使用mysql,我正在研究我正在制作的网站的架构。我有点卡住,因为我有用户,社区(用户组),活动(由一个或多个用户或社区参与的用户或社区制定的计划)和rsvps(包含用户/社区的日期)参加一项活动)。我为用户,社区和活动创建了一个表,但我坚持使用rsvps:

我遇到的问题是理想情况下我对rsvps表有类似的东西:

USER/COM     ID     ACT_ID     DATE     Goin?
U            2342   1          7/1/12   true
U            1342   1          7/2/12   false
U            2842   1          7/1/12   true
C            5342   1          7/1/12   false

ID是用户或社区表的外键约束,具体取决于USER / COM属性的值。现在我很确定不可能这样做,所以我只是想知道你会怎么做。

最后注意:除了rsvp表之外,我还有几个其他表需要能够同时使用用户或社区,所以我更喜欢这个想法尽可能简单的rsvp表。

如果您需要更多信息,请与我们联系, 谢谢:))

2 个答案:

答案 0 :(得分:0)

我会创建另一个连接用户和社区的表。

ID    USER_OR_COMMUNITY_ID     IS_USER
1     32933                    true
2     2398                     false
3     23278                    false
4     923                      false

这可能很有用,因为用户和社区可能有类似的信息类型。例如,用户也有一个名称(用户名),社区。他们也可能有一个注册日期,头像等等。所以你可以有一个表,例如这些列:id,user_or_community_id,is_user,name,date_registred。然后,特定于用户的所有数据将存储在用户表中,并且对于社区也是如此。

但我不确定,这是一个很好的问题。这可能会有点复杂。

答案 1 :(得分:0)

因为我非常喜欢外键,所以我会使用类似的东西

RSVP_ID   USER_ID    COM_ID   ACT_ID     DATE     Goin?
1         2342       NULL     1          7/1/12   true
2         1342       NULL     1          7/2/12   false
3         2842       NULL     1          7/1/12   true
4         NULL       5342     1          7/1/12   false

RSVP_ID只是一些自动增量主键。您可以在user_id + act_id和com_id + act_id上添加2个唯一键。

这样,您可以让外键正常工作。此外,我总是有一个内容不同的专栏......