2009-06-02 28 views
5

Trong một cơ sở dữ liệu quan hệ cổ điển, tôi có bảng sau:Mối quan hệ đệ quy với Google App Engine và 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)) 

Tôi cố gắng để chuyển đổi bảng này vào một bảng Google App Engine. Vấn đề của tôi là với các trường MotherId và FatherId. Tôi đã thử mã dưới đây, nhưng không có cơ hội. Python nói rằng nó không biết kiểu đối tượng Person.

class Person(db.Model): 
    mother = db.ReferenceProperty(Person) 
    father = db.ReferenceProperty(Person) 
    firstName = db.StringProperty() 

Có ai biết cách chúng ta có thể mô hình hóa mối quan hệ đệ quy trong bảng Google App Engine không? Làm thế nào tôi có thể làm việc xung quanh giới hạn của App Engine?

CẬP NHẬT Tôi muốn mở rộng vấn đề một chút ... Nếu tôi muốn thêm bộ sưu tập trẻ em thì sao?

children = db.SelfReferenceProperty(collection_name='children_set') 
dad.children.append(childrenOne) 

Tôi đã thử cách này và nó không hoạt động. Bất kỳ ý tưởng những gì tôi đang làm sai?

Cảm ơn!

Trả lời

10

Tôi nghĩ rằng bạn muốn SelfReferenceProperty đây

class Person(db.Model): 
    mother = db.SelfReferenceProperty(collection_name='mother_set') 
    father = db.SelfReferenceProperty(collection_name='father_set') 
    firstName = db.StringProperty() 

Ngoài ra, bạn có thể đặt quan hệ Mẹ và Cha trong các lớp riêng biệt.

+1

Bạn cũng sẽ cần phải thiết lập thuộc tính collection_name để tránh 'Class Person đã có person_set tài sản' lỗi: mẹ = db.SelfReferenceProperty (collection_name = 'mother_set') cha = db.SelfReferenceProperty (collection_name =' dad_set ') – robertc

+0

Tôi không biết về điều đó. Đã chỉnh sửa, cảm ơn :) – NicDumZ

+0

Điều này thực sự tuyệt vời! Tôi không biết về điều đó. Làm thế nào tôi có thể lập mô hình một bộ sưu tập trẻ em? trẻ em = db.SelfReferenceProperty (collection_name = 'children_set') dad.children.append (childrenOne) Tôi đã thử cách này và không hoạt động. :( – Martin

Các vấn đề liên quan