我对如何在App Engine中建立多对多关系有疑问:

一个Blogentry可以有许多标签,一个标签可以应用于许多博客条目。

我看到几种情况:


使用字符串集作为博客条目上的属性。


这使我可以轻松地使用标签查询条目
这不允许我获取所有标签及其权重(它们适用于多少个条目)

在Entry和Tag类之间使用非所有权关系(Entry类中的Tag的键集,反之亦然)


这使我可以获取所有标签及其权重
这要维护得多
是Set属性是懒加载的,还是每次都会获取对象的整个图? (获取条目,该条目获取多个标签,每个标签依次获取多个条目)

使用1.,但分别维护标签及其权重上的数据


标签数据和条目中的标签之间存在同步问题



任何输入和指针,将不胜感激。我认为这是一个很常见的情况,但是我还没有看到任何好的解决方案。

最佳答案

与许多其他数据库管理系统一样,App Engine数据存储区本身不支持多对多关系,但可以通过“连接表”解决。但是,由于App Engine的查询语言不支持联接,因此在您的应用程序中使用它会非常痛苦。实际上,Google的BigTable架构不鼓励这样做,因为分布式联接效率不高。

因此,我建议遵循“保持简单愚蠢”规则;使用最简单的方法。 “ Blogentry”对象中的字符串列表听起来相当健壮。即使很容易出现竞争状况(人们并行进行更新,覆盖彼此的更改),但是您仍然有多少人在编辑同一篇博客文章?

关于java - 如何在App Engine中建立多对多关系的模型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1747207/

10-13 05:25