【发布时间】:2010-09-24 23:31:17
【问题描述】:
我已经建立了一个分为 3 个部分的产品数据库。每个部分都有一个包含标签的“子”部分。但是我使用它的次数越多,感觉就越不稳定。我所做的每一次添加都需要越来越多的代码才能让它工作。
产品由零件组成,每个零件都属于一种类型。每个产品、部件和类型都有一个标签。每种语言都有一个标签。
产品包含 2 个列表中的部件。一个默认部件列表(每种类型一个)和一个可选部件。
现在我想在组合中添加货币,并决定重新建模我处理此问题的整个方式。
我想要得到的结果是所有产品对象的列表,其中包含名称、描述、价格、所有部件以及与部件匹配的所有类型。并为这些正确的语言标签。
像这样:
product
- name
- description (by language)
- price (by currency)
- parts
- part (type name and part name by language)
- partPrice (by currency)
我当前设置的问题是 db.ReferenceProperty 和 db.ListProperty(db.key) 的狂野混合
获取所有数据有点麻烦,需要多个 for 循环、匹配的 dict 和数据存储调用。嗯,有点乱。
重新模型(未经测试)看起来像这样
class Products(db.model)
name = db.StringProperty()
imageUrl = db.StringProperty()
optionalParts = db.ListProperty(db.Key)
defaultParts = db.ListProperty(db.Key)
active = db.BooleanProperty(default=True)
@property
def itemId(self):
return self.key().id()
class ProductPartTypes(db.Model):
name= db.StringProperty()
@property
def itemId(self):
return self.key().id()
class ProductParts(db.Model):
name = db.StringProperty()
type = db.ReferenceProperty(ProductPartTypes)
imageUrl = db.StringProperty()
parts = db.ListProperty(db.Key)
@property
def itemId(self):
return self.key().id()
class Labels(db.Model)
key = db.StringProperty() #want to store a key here
language = db.StringProperty()
label = db.StringProperty()
class Price(db.Model)
key = db.StringProperty() #want to store a key here
language = db.StringProperty()
price = db.IntegerProperty()
这里的主要内容是我已经将标签和价格分开了。因此,这些可以包含任何产品、零件或类型的标签和价格。
所以我很好奇,从架构的角度来看,这是一个可靠的解决方案吗?即使每个模型中有数千个条目,这也会成立吗?
此外,我们欢迎任何有关以良好方式检索数据的提示。我目前的解决方案是先获取所有数据,然后对它们进行 for 循环并将它们粘贴在 dicts 中,但感觉它可能随时失败。
..弗雷德里克
【问题讨论】:
标签: python google-app-engine architecture google-cloud-datastore