数据存储中关于中间表的查询

想问下,就基于中间表文档中所举的例子,Student 和 Course, 例子中示例是根据某Student查Course, 根据某Course查Student.

我想要的查询是,Student列表,每个Student数据中需要包含Student选的课程. 这样子要怎么查询呢。 看中间表的列子基本都是根据单一条件来查另一组数组。

实际业务中,假设Post中关联一组书,类似Post列表数据里需要返回每个Post以及对应书籍数组. 目前都不知道如何查询,看到一些帖子的说法,难道要先查出Post列表,然后每个Post单独去查询关联的书籍?掉API应该不可行的吧.

可以理解,直接在服务器上去数据库中查询是OK的,就好比在客户端本地数据库查多次去组装数据都是可以的. 但是LeanCould完全是客户端在调API, 这样如果调一组30个Student,就需要额外掉30次单独查询单个Sdudent所关联Course的API, 这肯定是不行的. 无论是调用时间,花费的费用都将大幅上升

又有人提到使用冗余数据,也就是不用中间表,先不说文档中推荐多对多用中间表。假设用冗余数据,但数据如何更新呢?看Array只能放json,假使Course需要更新,总不能去更改所有存储过Course的地方吧。而且在实际业务中,很多对象都是彼此关联的.

比方说Course也存在上课的老师,也会有不同的老师会上同一节课. 这样课程和老师也会产生一个中间表.

所以看文档中,1对1,1对多,都还是可行,但是多对多就很难去查询. 看原先的relation似乎可以解决,但是已经废弃了.

所以发帖想问下,这种普遍存在的业务的查询如何在LeanCloud实现?

如果查询需求比较复杂,没有太好的办法,只能多建几张中间表。

建多个中间表问题不大,只要可以控制在有限的查询就能查询出来数据就行

现在我只是疑问就第一个帖子的问题,就一个中间表的情况,查一个Student列表,每个Student数据中需要包含Student选的课程. 这样情况如何查询?是否只能先查Student表,然后再遍历出来 ObjectID,再依次去中间表去查Course。 还有其他方式吗?

因为如果这样的话,我感觉当做实际业务时,关联数据稍微复杂一些,接口调用次数就成几何倍上涨. 我目前的页面设计上,其实就有2个中间表,都需要在一个业务请求中返回。

如果只能以遍历方式在客户端进行依次查询话, 那目前可能还是得自建服务来去实现了. 因为类似查询在实际业务中普遍存在的,不太可能说,数据模型就像例子中那么简单。只有A,B,中间表,然后根据某一A去查B, 或者某一B去查A. 因为最开始一般都是A列表,且基本上都会需要将B,甚至关联C,D一并查出来.

也可以考虑允许冗余数据,可以需要频繁查询的或变动不频繁的字段冗余一份。比如,假设经常需要查询某个专业的学生选了哪些课,那可以把专业信息也一并写入中间表,这样就不用先去 Student 表查 ObjectID 了。

过了个春节,我又来了。 感谢您的回复

您回复的这个是个方式,可以解决表多的情况,但依旧是更具某一特定ID查这一条件下的其他数据。

而我一直想问的是, 举个不恰当的例子就是一个查询查出来所有的专业列表,以及某一专业学生所选的课程的数据。

也就是初始列表里想包含一级对象以及二级对象.

以上的回复都不能解决这个问题. 无论是建立多个中间表或者是冗余数据也好。

如何能在一个接口里获取 查一个Student列表,每个Student数据中包含Student选的课程呢. 是否确定只有遍历调用的方式。

因为不支持联表查询、聚合查询,这类需求没有特别好的办法。