【问题标题】:Node Sequelize where through multiple tablesNode Sequelize where 通过多个表
【发布时间】:2017-07-16 15:03:10
【问题描述】:

当运动员和使用 Sequelize 的组织之间存在多个表时,我希望能够检查该运动员是否属于某个组织。这可能吗?还是我需要将关联扩展到运动员的班级?

例如,我有一个如下图的结构

如您所见,运动员属于一个团队,属于一个部门,等等......直到一个组织。

我有一个使用 Sequelize 运行的节点/mysql 数据库。我之前用过 ruby​​ on rails,你可以使用“through”来表示可以通过特定的直接关系找到间接关系,但我还没有找到类似 Sequelize on a belongsTo 关系的东西。

只是考虑一下,即使有解决方案可以做到这一点,我猜 sequelize 将加入所有这些表,这将是昂贵的。最好让组织直接与运动员关联,而不是通过一系列其他类链接?

感谢您的帮助。

【问题讨论】:

    标签: node.js join sequelize.js


    【解决方案1】:

    在 Sequelize 中,您可以在查询中嵌套 belongsTo。在您的情况下,它看起来像:

    Athlete.find({
        include: [
            {
                model: Team,
                include: [
                    model: Division,
                    include: [
                        model: AgeGroup,
                        include: [
                            model: League,
                            include: [
                                model: Season,
                                include: [
                                    model: Organisation,
    
                                ]
                            ]
                        ]
                    ]
                ]
            }
        ]
    });
    

    这很丑 - 但不一定是问题。首先要做的是尝试一下,看看性能是否有问题 - 很有可能会没事的。

    如果性能是个问题,并且您已经准备好所有数据库索引和资料,但仍然无法获得合理的性能,那么可以,直接在运动员上添加organisation_id 是可以的。这称为“非规范化” - 您可以在其中存储冗余数据以优化读取性能。这是您应该尽可能避免的事情 - 但当您无法避免时,这很好。

    您只需要记住,当您更改运动员的team_id 时,您可能还必须更新他们的organisation_id

    【讨论】:

    • 虽然我最终没有走这个方向,但答案确实有助于告知我最终走的方向。谢谢
    猜你喜欢
    • 2016-06-09
    • 2017-07-26
    • 1970-01-01
    • 2020-05-31
    • 2015-05-23
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多