MySQL表 - 设计高效表

hli*_*lim 0 mysql sql database database-design

我正在设计一个db表,它将保存用户收藏的食品清单.我使用以下架构创建了收藏表

id, user_id, food_id
Run Code Online (Sandbox Code Playgroud)

user_id和food_id将是链接到另一个表的外键.

我只是想知道这是否有效且可扩展,如果用户有多个喜欢的东西,那么它将需要多行数据.

即用户有5个收藏的食品,那么它将包含五行以保存该用户的清单.

这有效吗?可扩展?什么是优化此架构的最佳方法?

thnx提前!!!

小智 5

tldr; 这称为"连接表",是在关系数据库中建模MM关系的正确且可扩展的方法.(根据使用的约束,它还可以在"无NULL FK"模式中模拟1-M/1-1关系.)

但是,我认为这里应该省略id,以便该表只是 user_id, food_id.PK (user_id, food_id)就是这种情况.

与其他表格不同,其中代理人(又称自动增量)PK有时被认为是,代理人PK通常只会在联接表中添加混乱,因为它具有非常自然的复合PK.

虽然PK本身在这种情况下是复合的,但每个"连接"表仅涉及PK的一部分.根据执行的查询,在food_idor (food_id, user_id)上添加覆盖索引可能也是有益的.