节点通过多个表

时间:2017-02-25 20:41:48

标签: node.js join sequelize.js

当运动员和使用Sequelize的组织之间有多个牌桌时,我希望能够检查运动员是否属于某个组织。这可能吗?或者我是否需要将这种联系扩展到运动员的班级?

例如,我有一个如下图所示的结构 enter image description here

正如你所看到的,运动员属于一个团队,属于一个部门,等等于一个组织。

我有一个使用Sequelize运行的node / mysql数据库。我之前在轨道上使用过红宝石,在那里你可以使用"通过"表明通过特定的直接关系可以找到间接关系,但我还没有找到关于属性关系的Sequelize的类似内容。

考虑到这一点,即使有解决方案,我也猜测续集会加入所有这些表,这将是昂贵的。也许最好是让组织直接与运动员联系,而不是通过一系列其他课程联系起来?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在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