我有一个名为 "用户 "的表,通常有以下字段。
用户id, name, email, password, userType, jobTitle等。
现在每个用户也可以有一个经理。我如何在seuqlize中定义关系来定义特定用户的经理。
我想过的一种方法是在Users表中增加一列managerId,并且有用户的id,他是经理。
或者创建一个名为User_Manager的连接表,以userID和managerID作为外键,这样做会更好吗?
哪种方式最好,如何使用sequelize定义?
这两种解决方案都有可取之处。
在Users表中设置一列,如 manager_id
是快捷方便的,并提供了一个简单的自助加入获得经理。
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 并在用户表中添加该列。