多对多联接可以实现为联接表(或关系模型)。在下面的解决方案中,有一个模型保存应用于单个
Groups
(
GroupTags
)以及一个模型,它保存应用于
Topics
(
TopicTags
).
分离
Tag
从引用到
标签
Group
或
Topic
对此
标签
已应用。
topics
这是一个将获取所有
主题
实体谁是
group
参考点
. 同样,每个
集团
得到一个
tags
来自的属性
GroupsTags
模型提供了
标签
属于它的实体。每
标签
groups
和
话题
属性,该属性是对指定了给定标记的那些类型的所有实体的查询,使按标记搜索(非常典型的操作)变得非常简单。
这是一个非常强大和灵活的方法来建模系统,如你的。
class Group(db.Model):
class Topic(db.Model):
title = db.StringProperty(required=True)
group = db.ReferenceProperty(Group, collection='topics')
class Tag(db.Model):
text = db.StringProperty(required=True)
class GroupTags(db.Model):
group = db.ReferenceProperty(Group, collection='tags')
tag = db.ReferenceProperty(Tag, collection='groups')
class TopicTags(db.Model):
topic = db.ReferenceProperty(Topic, collection='tags')
tag = db.ReferenceProperty(Tag, collection='topics')