我正在尝试设计一个架构,用于在SQLAlchemy中代表一个有父母和子女的家庭。父母可以与许多孩子有关,每个孩子都有两个父母,父亲和母亲。我可以通过使用多对多关系来做类似的事情。
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 )
然而,由于这允许孩子有两个以上的父母,这是不能令人满意的。相反,我试图手动指定从孩子到父母的单向关系:
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 :(得分:2)
只是一个建议:既然你将'母亲'和'父亲'与'父母'分开,我认为你最好避免多对多的关系。相反,一对多的关系似乎更好。课程应该是这样的:
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'))
...