需要关于在多个链接 table 上重复 table 主键作为外键的建议

Need advice on repeating a table primary key on multiple linked tables as foreign key

我正在寻找对 SQL 有更多经验的人的第二意见。

所以我有一个看起来像这样的数据库:

Company has multiple Clients which has multiple Projects which has multiple Tasks, etc.

在我的应用程序中,用户被分配了一家公司,无法查询与其无关的信息。因此,每当用户尝试检索 Client/Project/Task/Punch 时,我都需要确保我的查询包含一个看起来像 WHERE companyID=[user's company id] 的 Where 子句。这在我需要获取 Punch 时添加了很多连接,因为我需要向上链查看公司是否与用户相同。

由于 client/project/task/punch 永远不会从一家公司切换到另一家公司,我想知道是否有任何危险信号可以在 project/task/punch 中添加 companyID 字段以简化查询?

我正在使用 PostgreSQL

如果我没理解错的话,你正在构建的是一个多租户系统,你的公司就是租户。如果是这种情况,则没有危险信号 - 相反,您主要关心的是以最有效和最安全的方式隔离属于不同公司的数据。

我发现 this old blog post 是对多租户的基本但清晰的介绍。

推荐的方法过去是,现在也是第三种选择:一个数据库,多个模式。我不是 Postgres 专家,但我相信它能很好地支持该选项。