Google App Engine与BigTable的递归关系
在一个经典的关系型数据库中,我有以下这个表:
CREATE TABLE Person(
Id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
MotherId int NOT NULL REFERENCES Person(Id),
FatherId int NOT NULL REFERENCES Person(Id),
FirstName nvarchar(255))
我想把这个表转换成一个Google App Engine的表。我的问题出在MotherId和FatherId这两个字段上。我尝试了下面的代码,但没有成功。Python说它不知道对象类型Person。
class Person(db.Model):
mother = db.ReferenceProperty(Person)
father = db.ReferenceProperty(Person)
firstName = db.StringProperty()
有没有人知道我们如何在Google App Engine的表中建模一个递归关系?我该如何绕过App Engine的限制呢?
更新
我想把问题扩展一下……如果我想添加一组孩子呢?
children = db.SelfReferenceProperty(collection_name='children_set')
dad.children.append(childrenOne)
我试过这样做,但不行。你们觉得我哪里做错了?
谢谢!
1 个回答
10
我觉得你这里需要用到自引用属性(SelfReferenceProperty)。
class Person(db.Model):
mother = db.SelfReferenceProperty(collection_name='mother_set')
father = db.SelfReferenceProperty(collection_name='father_set')
firstName = db.StringProperty()
另外,你也可以把母亲和父亲的关系放在不同的类里。