mysql - 在 MySQL 中有效地处理不同类型的“follow”函数
问题描述
这是项目的表格
User
Car
CarPart
因此在项目中,用户可以关注多个项目类型,例如:另一个用户、汽车、汽车子模型、汽车零件。这份清单可能会很长。
从技术上讲,首先想到的是创建 3 个数据透视表并在其中使用外键:
FollowUserUser
FollowUserCar
FollowUserCarPart
问题是,这是正确的方法吗?由于项目类型可能会增加功能,是否有任何其他方法可以最大限度地减少表数?
解决方案
“正确”是相当主观的。
有几种选择,每一种都有取舍。
您描述的设计需要每个关系一个表,这意味着检索有关(例如)用户信息的连接数量随着关系数量的增加而增加。从性能的角度来看,这不是问题,但会使您的查询变得复杂。该设计使链接非常明确,这通常对未来的开发人员很有帮助,并允许您向每个关系添加自定义数据 - “用户关注用户”可能具有“角色”属性(老板、同事、朋友等),这不适用于“用户跟随汽车”。
另一种方法是有一个单一的“关系”表:
user_id
car_id
car_part_id
relationship_type
这允许您在单个表中捕获关系,但您仍然需要所有连接来了解用户,而且它的表达力不够。您也不能存储关系的自定义属性。
推荐阅读
- javascript - 在 contenteditable 中禁用 Shift-Enter
- django - Django:解包的值太多(预期 2)
- unit-testing - Azure Pipeline 找不到要发布的测试结果文件
- kubernetes - kubernetes dashoboard「尝试访问服务时出错:'proxyconnect tcp: dial tcp:lookup $http_proxy: no such host」
- ios - 应用中收藏夹功能的最佳实践
- r - 嵌套列表到数据框 [使用 purrr + map]
- git - 如何在本地克隆整个 AOSP 代码库
- javascript - 如何使用 JS eventListener 更新 Firestore 数据库以提交表单
- c - 为什么 gcc 在 sizeof typedef'ed 指针上出错
- python - 返回数组中数字的总和,除了忽略以 6 开头并延伸到下一个 9 的数字部分。返回 0 表示没有数字