处理不同类型的;跟随;在MySQL中高效运行

处理不同类型的;跟随;在MySQL中高效运行,mysql,database,Mysql,Database,这是项目的表格 User Car CarPart 因此,在项目中,用户可以遵循多种项目类型,例如:另一个用户、一辆汽车、一个汽车子模型、一个汽车零件。这个清单可能会很长 从技术上讲,首先想到的是创建3个透视表并在其中使用外键: FollowUserUser FollowUserCar FollowUserCarPart 问题是,这样做正确吗? 由于功能中的项目类型可能会增加,是否有其他方法可以最大限度地减少表计数?“适当”是非常主观的 有几个备选方案,每个方案都有权衡 您描述的设计要求每个关

这是项目的表格

User
Car
CarPart
因此,在项目中,用户可以遵循多种项目类型,例如:另一个用户、一辆汽车、一个汽车子模型、一个汽车零件。这个清单可能会很长

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

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

“适当”是非常主观的

有几个备选方案,每个方案都有权衡

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

另一种方法是使用一个“关系”表:


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

对我来说似乎是合理的。
user_id
car_id
car_part_id
relationship_type