如何实现对很多关系?数据存储谷歌应用引擎

时间:2014-11-16 13:26:01

标签: google-app-engine google-cloud-datastore

我的应用程序有业务实体,每个业务属于一个或多个类别! 应该如何在我的数据库中实现关系?

我有两个选择,

第一个选项: (在商业实体中存储属于特定业务的所有类别。)

class business(ndb.Model):
      name = ndb.StringProperty()
      categories = ndb.KeyProperty(kind=category,repeated=True)

class category(ndb.Model)
      name = ndb.StringProperty()

第二个选项: (用于存储属于类别实体的特定类别的所有业务)

    class business(ndb.Model):
          name = ndb.StringProperty()

    class category(ndb.Model)
          name = ndb.StringProperty()
          businesses = ndb.KeyProperty(kind=business,repeated=True)

我应该实施哪个选项?

另一个问题:

每个企业都可以有一个或多个图片: 我应该将图像存储在业务实体的列表中:

class business(ndb.Model):
              name = ndb.StringProperty()
              imagesUrl = ndb.StringProperty(repeated = True)

或为每张图片创建新实体:

class image(ndb.Model):
        businessKey = ndb.KeyProperty(repeated = True)
        imageUrl = ndb.StringProperty()

我知道实体大小限制为一个兆!是吗?

1 个答案:

答案 0 :(得分:0)

像这样的决定通常取决于您的使用模式。但是,在您的情况下,看起来选项1是合乎逻辑的选择,因为有更多的业务实体而不是类别实体。

例如,如果您在检索单个业务实体时需要知道业务属于哪些类别,则在选择选项2时必须运行额外的查询。对于选项1,此额外查询是不必要的。< / p>

另一个考虑因素是更新的频率。如果选择选项2,则每次添加新业务实体时都必须更新类别实体(因此,必须更新两个实体,这会影响性能和成本)。使用选项1,您只需要更新一个实体。

相关问题