当运动员和使用Sequelize的组织之间有多个牌桌时,我希望能够检查运动员是否属于某个组织。这可能吗?或者我是否需要将这种联系扩展到运动员的班级?
正如你所看到的,运动员属于一个团队,属于一个部门,等等于一个组织。
我有一个使用Sequelize运行的node / mysql数据库。我之前在轨道上使用过红宝石,在那里你可以使用"通过"表明通过特定的直接关系可以找到间接关系,但我还没有找到关于属性关系的Sequelize的类似内容。
考虑到这一点,即使有解决方案,我也猜测续集会加入所有这些表,这将是昂贵的。也许最好是让组织直接与运动员联系,而不是通过一系列其他课程联系起来?
感谢您的帮助。
答案 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
。