首页 > 解决方案 > 在 MySQL 中有效地处理不同类型的“follow”函数

问题描述

这是项目的表格

User
Car
CarPart

因此在项目中,用户可以关注多个项目类型,例如:另一个用户、汽车、汽车子模型、汽车零件。这份清单可能会很长。

从技术上讲,首先想到的是创建 3 个数据透视表并在其中使用外键:

FollowUserUser
FollowUserCar
FollowUserCarPart

问题是,这是正确的方法吗?由于项目类型可能会增加功能,是否有任何其他方法可以最大限度地减少表数?

标签: mysqldatabase

解决方案


“正确”是相当主观的。

有几种选择,每一种都有取舍。

您描述的设计需要每个关系一个表,这意味着检索有关(例如)用户信息的连接数量随着关系数量的增加而增加。从性能的角度来看,这不是问题,但会使您的查询变得复杂。该设计使链接非常明确,这通常对未来的开发人员很有帮助,并允许您向每个关系添加自定义数据 - “用户关注用户”可能具有“角色”属性(老板、同事、朋友等),这不适用于“用户跟随汽车”。

另一种方法是有一个单一的“关系”表:

user_id
car_id
car_part_id
relationship_type

这允许您在单个表中捕获关系,但您仍然需要所有连接来了解用户,而且它的表达力不够。您也不能存储关系的自定义属性。


推荐阅读