【发布时间】:2016-01-01 00:18:10
【问题描述】:
我将 go 与应用引擎和数据存储一起使用。我有餐厅和业主实体。 Owner 是 Restaurant 的父级。我在主页上显示餐厅列表。当访客点击餐厅时,个人资料页面(www.../restaurants/:id)将打开。那时我没有祖先密钥。我应该如何找回餐厅?我可以使用 /restaurants/:key 但 datastore.key 是很长的字符串。 这样做的自然方式是什么?我应该使用唯一的餐厅名称并以此进行查询/过滤吗?
【问题讨论】:
-
为什么所有者有祖先,而是使用关系。即餐厅的所有者 = KeyProperty()。您是否使用涉及业主和餐厅的事务组?通常人们过度使用祖先财产以获得拥有的关系,然后遭受不利影响。例如,如果您的餐厅更改了它的所有者,您必须使用新的父级重新创建餐厅。如果您访问餐厅并不总是涉及所有者,那么您就有问题了。以拥有者为祖先,目前有什么好处?
-
KeyProperty 是 Python 中的一个术语吗?我用围棋。所以,我使用 Ancestor 是因为当我删除所有者时,我可能想删除它下面的餐馆,然后删除餐馆下面的菜单等等。听起来我需要交易。我不知道如何以聪明的方式做到这一点。但是你的意思是我在餐厅下添加一个字符串字段并将它的值设置为所有者的键值吗?如果是这样,我可以做到。
-
KeyProperty 与 go 中的
Datastore key相同。即使您使用祖先,也没有级联删除。所以你必须执行一系列查询和删除。是的,单笔交易可能是合适的,但您有 XG 交易,所以这没什么大不了的。当您不知道父母而没有查询时,与偶尔删除所有者相比,是否值得将您最常见的寻找餐厅的要求复杂化?那是你决定的事情。查看所有一般用例并设计数据模型以有效支持最常见的用例。
标签: google-app-engine google-cloud-datastore