我正在寻找最简单,最有效的SQL查询来检索events与给定相关的所有内容user.
这是我的架构的简单表示:
有几点需要注意:
users属于teamsvia memberships.teams可以有很多collections,apps和webhooks.collections也可以有很多webhooks.webhooks可以属于team或者collection,但只能属于一个.events 可以属于任何对象,但只能属于一个对象.这似乎是大多数SaaS类型公司所拥有的相当基本的设置(例如Slack或Stripe).一切都由团队"拥有",但用户属于团队并与界面交互.
鉴于该设置,我想创建一个解决...的SQL查询...
查找与给定用户相关(直接或间接)的所有事件
id.
我可以轻松编写直接或间接通过特定方式查找的查询.例如...
查找与用户直接相关的所有事件
id.
SELECT *
FROM events
WHERE user_id = ${id}
Run Code Online (Sandbox Code Playgroud)
要么...
通过他们的团队查找与用户间接相关的所有事件.
SELECT events.*
FROM events
JOIN memberships ON memberships.team_id = events.team_id
WHERE memberships.user_id = ${id}
Run Code Online (Sandbox Code Playgroud)
甚至...
通过团队的任何集合查找与用户间接相关的所有事件.
SELECT events.*
FROM events …Run Code Online (Sandbox Code Playgroud)