3

私は最近、NoSQL データベースのデータを平坦化することを指摘する多くの記事に出くわしました。従来の SQL データベースから来て、GAE で SQL db の動作を複製していることに気付きました。そこで、可能な限りコードのリファクタリングを開始しました。

たとえば、ユーザー同士が友達になれるソーシャル メディア サイトがあります。

class Friendship(ndb.Model):
   from_friend = ndb.KeyProperty(kind=User)
   to_friend = ndb.KeyProperty(kind=User)

事実上、アプリは両方のユーザー間に友情のインスタンスを作成します。

friendshipA = Friendship(from_friend = UserA, to_friend = userB)
friendshipB = Friendship(from_friend = UserB, to_friend = userA)

これを実際のユーザー モデルに移動してフラット化するにはどうすればよいでしょうか。StructuredProperty を使用できるのではないかと考えました。5000 エントリに制限されていることはわかっていますが、それは友達にとっては十分なはずです。

class User(UserMixin, ndb.Model):
     name = ndb.StringProperty()
     friends = ndb.StructuredProperty(User, repeated=True)

だから私はこれを思いつきましたが、ユーザーは自分自身を指すことができないので、そうです。私は得るのでNameError: name 'User' is not defined

単一の User インスタンスにすべての友人とそのすべてのプロパティが含まれるように、それをフラット化する方法はありますか?

4

2 に答える 2