MySQL 多对多 table 约定

MySQL many to many table convention

假设有2个tables usersevents.

[ users ]
- id(PK)
- name
[ events ]
- id(PK)
- title
- description

通常情况下,枢轴 table(M:N) 看起来像这样。

[ user_event ]
- id(PK)
- user_id(FK to users)
- event_id(FK to events)

我应该在 user_event m:n table 中插入额外的列吗?

[ user_event ]
- id(PK)
- user_id(FK to users)
- event_id(FK to events)
- is_leave

我必须检查用户是否离开了活动。所以 is_leave 列被添加到 user_event.

我想知道,这是不是一个坏方法?

这里有约定吗?

谢谢。

添加属性列到user_event就可以了,我称之为交集table*.

规则应该是,如果该属性与参加特定活动的个人用户有关,则将其放在交集 table.

中是正确的

换句话说,它不属于 users table,因为它不适用于用户参加的所有活动。它不属于 events table,因为它不适用于给定事件的所有用户。


* There's no official terminology for this type of table. 我更喜欢“intersection table”,但我听说过其他术语。

基于 Bill 的“交叉点”讨论...

  • 去掉 id 它没用而且会减慢速度。
  • 提供双向复合索引。

详细信息和更多提示:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table