【问题标题】:achieve "friends data model" with postgres用postgres实现“好友数据模型”
【发布时间】:2020-09-27 16:56:06
【问题描述】:

我需要一些关于如何设置我想要实现的目标的指导。我正在 postgres 中创建一个数据库,需要有关如何设置数据模型的帮助。

我正在开发一个个人应用程序,基本上我有用于用户、事务和组的表。

用户有列(id, email)事务有列(id, amount, user_id, ...)

所以基本上要点是个人用户有自己的交易。对我来说棘手的部分是设置组部分

组可以由 2 个或更多用户组成,我想要实现的是当 2 个或更多用户成为一个组时,我希望所有用户都能够从其他用户的交易中获得 TOTAL AMOUNT。

我认为将组表作为典型的“朋友数据模型”使用 user_id_oneuser_id_two 并具有适当的唯一性和约束会有所帮助,但我卡住了。

所以我需要帮助的是,

小组的桌子应该是什么样子? (或者我可以采取另一种方法,添加另一个表?什么样的关系?)

查询应该是什么样子才能获得两个用户的交易? (如果无法通过查询完成,我可以将服务器上的所有金额相加)

任何帮助将不胜感激!

【问题讨论】:

    标签: sql database postgresql data-modeling


    【解决方案1】:

    所以我理解你应该创建某种链接表 示例:

    |  [Users]  |             |[UserGroups]|             |  [Groups]  |
    |user_id    |             |id          |             |group_id    |
    |email      | ∞         1 |user_id     | 1         ∞ |other_data  |
    |other data | ----------> |group_id    | <---------- |            |
    

    然后例如,您可以编写查询以获取给定组的所有事务:

    SELECT * FROM Transactions t JOIN UserGroups ug ON t.user_id = ug.user_id WHERE ug.group_id= ?;
    

    我不确切知道您想要什么查询,但这只是示例。

    【讨论】:

    • 谢谢,这有帮助。使用您提出的解决方案,我猜我必须将group_id 与 [Users] 表一起存储,对吧?为了完成 WHERE 子句
    • 不,没必要。图中缺少的是 Transaction 表,它必然包含 user_id 作为 User 的 FK,UserGroups 表还包含 user_id 作为 User 的 FK。现在,您不需要/想要来自 User 的任何其他属性,只需将 Transactions 直接加入 UserGroups,就像 @Serkus 的查询一样。唯一需要的是将 group_id 提供给查询。无需更改表/列。如果您在获取组和/或用户列时仍需要帮助,请将其作为新问题发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2015-11-05
    • 2012-08-21
    • 2010-12-14
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多