都市と地域を持つ必要がある挿入を作成できるユーザーを持つプリミティブ データ モデルがあります。複数の都市に関連する記事を準備する (たとえば、2 つ以上の都市で同じ製品を提供する場合、記事が接続されている都市ごとに記事が重複するのではなく、都市のリストを含む 1 つの記事になるようにするため)に)。
class Region(db.Model):
name = db.StringProperty()
countrycode = db.StringProperty()
vieworder = db.IntegerProperty() # custom ORDER BY variable to order by population
areacode = db.IntegerProperty()
areacodes = db.ListProperty(int)
class City(db.Model):
region = db.ReferenceProperty()
name = db.StringProperty()
vieworder = db.IntegerProperty()
areacode = db.IntegerProperty()
それで、ストレージとビューを作成することはできましたが、データ モデルは良くありません。
class Article(db.Model):
cities = db.ListProperty(db.Key)
regions = db.ListProperty(db.Key)
インサートには次のようにコーディングされています。
if self.request.get('area'):
city = model.City.get_by_id(long(self.request.get('area')))
region = model.Region.get(city.region.key())
article.cities.append(city.key())
article.regions.append(region.key())
article.city = unicode(city.name)
article.region = unicode(region.name)
article.put()
これは冗長性を生成し、あまりきれいではありません (フィールドにリストを保存したため、1NF ではありません)。
検索 API のインデックスを作成するとき、今のところ 1 つの都市しか使用していませんが、都市のリストと地域のリストを処理する予定です (ただし、都市が 2 つの地域に存在することはあり得ないため、都市リスト以外はすべて冗長ですが、検索やビューでの長いルックアップを避けるために冗長性を節約します)。参照プロパティとキーを正しく使用したかどうか、代わりに NDB モデルを使用した方がよいかどうか疑問に思います。