2014-05-12 3 views
0

SQLAlchemy에서 부모와 자녀가있는 가족을 나타내는 스키마를 설계하려고합니다. 부모는 많은 어린이들과 관련 될 수 있으며, 각 어린이는 정확히 두 명의 부모 인 아버지와 어머니가 있습니다. 나는 다 - 대 - 다 관계를 사용하여 비슷한 것을 할 수있다.스키마 2 대 다수 관계 (예 : 어머니와 아버지가있는 자식)

family_table = db.Table('family', db.metadata, 
    db.Column('parent_id', db.Integer, db.ForeignKey('parent.id')), 
    db.Column('child_id', db.Integer, db.ForeignKey('child.id')) 
    ) 

class Parent(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    children = db.relationship('Child', secondary = family_table, backref = 'parents') 

class Child(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 

그러나 이것은 아이가 2 명 이상의 부모를 가질 수 있기 때문에 만족스럽지 않습니다. 대신 내가 직접 아이의 아버지와 어머니에 대한 단방향 관계를 지정하는 것을 시도했다 :

class Child(db.Model): 
    id = db.Column(db.Integer, primary_key = True) 
    father_id = db.Column(db.Integer, db.ForeignKey('parent.id')) 
    father = db.relationship('Parent', foreign_keys = father_id) 
    mother_id = db.Column(db.Integer, db.ForeignKey('parent.id')) 
    mother = db.relationship('Parent', foreign_keys = mother_id) 

내 질문 : 나는 부모로부터 자식에게가는 관계를 정의하려면 어떻게 (예를 들어, 부모 테이블의 아이 열을)?

감사합니다.

답변

0

그냥 '엄마'와 '아버지'를 '부모'에서 분리했기 때문에 다 대다 관계를 피하는 것이 더 나을 것이라고 생각합니다. 대신, 일대 다 관계가 더 좋아 보인다. 수업은 다음과 같아야합니다.

class Mother(db.Model): 
    id = ... 
    children = db.relationship('Child', backref='mother', lazy='dynamic') 
    ... 
class Father(db.Model): 
    id = ... 
    children = db.relationship('Child', backref='father', lazy='dynamic') 
    ... 
class Child(db.Model): 
    ... 
    id = db.Column(db.Integer, primary_key = True) 
    father_id = db.Column(db.Integer, db.ForeignKey('father.id')) 
    mother_id = db.Column(db.Integer, db.ForeignKey('mother.id')) 
    ... 
+0

고마워요! 이것은 내가 찾고 있었던 바로 그 것이다. – onkel

+0

@onkel 좋습니다. '지원'을 클릭하면 멋질 것입니다! ;) – Jerry