我已經構建了一個產品數據庫,它分爲3部分。每個部分都有一個包含標籤的「子」部分。但我越用它工作越不穩定。而且每增加一項,我都需要越來越多的代碼才能實現它。在Google App Engine上設計可擴展的產品數據庫
產品是由零件構成的,每個零件都是一種類型。每個產品,部件和類型都有一個標籤。每種語言都有一個標籤。
產品包含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循環,匹配字典和數據存儲調用。那有點混亂。
重新模型(未測試)看起來像這樣
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()
這裏主要的事情是,我已經分裂的標籤,價格出來。所以這些可以包含任何產品,零件或類型的標籤和價格。
所以我很好奇,從建築的角度來看,這是一個堅實的解決方案嗎?即使每個模型中有數千個條目,這是否仍然成立?
此外,任何提示以良好的方式檢索數據是值得歡迎的。我目前的解決方案是首先獲取所有數據,然後循環使用它們並將它們粘在字典中,但感覺它可能會失敗。
..fredrik
謝謝。單獨價格的原因是產品包含每種語言(貨幣)的一種價格,而類型則相同。每種類型都有一個基於當前語言的標籤。有沒有一種方法可以用一些語言支持來使用元組? – fredrik 2010-09-24 12:05:35
我想獲取所有數據一次(每個表至少一個數據),所以我不會以一個新的查詢結束upp,以便在產品循環播放時爲其獲取標籤。 – fredrik 2010-09-24 12:07:08
IMO正確的方法是以十進制格式存儲價格,然後您應該使用適當的框架實用程序以期望的貨幣格式顯示。 – Shekhar 2010-09-24 12:38:37