数据存储建模层次结构,用于高效查询

时间:2012-10-15 02:40:42

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

我对数据存储层次结构以及如何为我的应用程序建模感到困惑。

我的应用会有用户。

数据将具有此特定层次结构:

用户将拥有锦标赛。

锦标赛(属性:地理数据)

在锦标赛中,用户将添加一个或多个团队。

内部团队用户将每天添加信息。

例如:

Team: Hawks  
Concept: Equipment  
String: Buy t-shirts  
Number: 11  
Number (price) : 15

这样的事情有意义吗?

class User(db.Model):
    name = db.StringProperty(required = True)
    pass = db.StringProperty(required = True)
    email= db.StringProperty()

class Tournament(db.Model):
    name  = db.StringProperty(required = True)
    place = db.GeoPt()
    owner = db.ReferenceProperty(User) 

class Teams(db.Model):
    belongs_to_tournament = db.ReferenceProperty(Tournament)
    name = db.StringProperty(required = True)
    players = db.IntegerProperty(required = True)

class DailyInfo(db.Model):
    created = db.DateTimeProperty(auto_now_add = True)
    concept = db.StringListProperty()
    info    = db.StringProperty()
    number  = db.IntegerProperty()
    price   = db.IntegerProperty()
    team    = db.ReferenceProperty(Teams)

这个模型是正确的还是我还应该添加祖先路径?我是否可以查询此信息以显示每个用户的相应信息?

1 个答案:

答案 0 :(得分:0)

在你的模型中你没有定义indexed=False,你是否需要在每个数据库的每个属性上编入索引?

就像这里一样,

class Tournament(db.Model):
   name = db.StringProperty(required = True)
   place = db.GeoPt()

class Teams(db.Model):
   belongs_to_tournament = db.ReferenceProperty(Tournament, collection_name =  'tournament_teams')
   name = db.StringProperty(required = True)
   players = db.IntegerProperty(required = True)
   price = db.FloatProperty(indexed=False)