MySQL 多对多 table 约定
MySQL many to many table convention
假设有2个tables users
和events
.
[ 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
假设有2个tables users
和events
.
[ 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