我有一个名为 Users 的表,它通常具有以下字段。
用户
ID,
名称,
电子邮件,
密码,
用户类型,
职称
现在每个用户也可以有一个经理。我将如何在 seuqlize 中定义关系来定义特定用户的经理。
我想到的一种方法是使用 managerId 向用户表添加另一列,并具有作为经理的用户的 id。
或者创建一个名为 User_Manager 的联结表,将 userID 和 managerID 作为外键会更好吗?
哪种方式最有效以及如何使用 sequelize 定义它?
最佳答案
这两种解决方案都有优点。
像 manager_id
这样的 users 表中的一列既快速又简单,并且提供了一个简单的自联接来获取管理器。
select users.id, managers.id as manager
from users
left outer join users as managers on users.id = managers.manager_id;
优点:快速简便
缺点:如果需要更多用户关系,则不可扩展
加入表和添加关系名称(即经理、团队成员等)的可能性允许更大的灵活性,但需要更多的设置。
select users.id,
user_relationship.id as manager,
relationships.role
from users
left outer join relationships on users.id = relationships.user_id and relationships.role = 'manager'
left outer join users as user_relationship on relationships.to_user_id = user_relationship.id;
两者都有优点-如果您有时间,那么也许可以使用连接表。如果您永远不需要更多的经理关系 - 那么 KISS 并在用户表中添加列。
关于javascript - Sequelize 同一张表上的关系。基于多对多检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62306943/