两张表关联时创建的joiner table(连接表)应包含哪些内容?
多对多关系表设计方案
你现有party表的party_description、party_time、party_location类字段完全不应该转移到user_party连接表。
这类字段属于单场派对的全局固有属性,和具体参与用户无关,同一场派对的对应属性不会因为参与用户变化而变化。如果把这类字段存储在连接表中,同一场派对有多少个参与用户就会产生多少条重复的属性记录,不仅会造成存储空间冗余,还会引发数据不一致问题:比如修改派对时间时漏改了某条关联的连接表记录,就会出现同一场派对显示多个时间的逻辑错误。
party主表推荐字段
所有属于派对本身、与单个参与用户无关的属性都存在这张表中:
- 主键
party_id:派对的唯一标识,必填 party_description:派对介绍party_time:派对举办时间party_location:派对举办地点- 其他可扩展字段,比如
max_participant(派对最大容纳人数)、host_user_id(派对发起者用户ID)等
user_party连接表推荐字段
连接表仅用来维护用户与派对的多对多关联关系,仅存储和「某用户参与某场派对」这个关联行为本身相关的属性:
- 外键
user_id:关联user表的user_id主键,标记参与用户 - 外键
party_id:关联party表的party_id主键,标记对应的派对
通常将
user_id和party_id设置为联合主键,避免同一个用户重复报名同一场派对
- 关联行为相关的可选扩展字段:
signup_time:用户报名派对的时间checkin_status:用户是否已签到入场note:用户报名时提交的备注信息等
内容的提问来源于stack exchange,提问作者craftdeer
相关产品推荐
相关产品推荐

