我有一个名为Node的表。每个节点都有许多Node类型的子节点。此外,Node对象有许多父对象。我还制定了一个算法来查找兄弟姐妹(具有相似父母的节点)
如何制作?为他们制作一张单独的桌子?还是我在同一张桌子上做?这就是我试图做到这一点并且明显失败的原因:
class Node(Model):
id = Column(String, primary_key=True)
name = Column(String)
parent_id = db.Column(db.String, db.ForeignKey('node.id'))
children = db.relationship('node', remote_side=[id], uselist=True)
parents = db.relationship('node', remote_side=[id], uselist=True)
siblings = db.relationship('node', remote_side=[id], uselist=True)
我不知道如何实现这一目标。
我实际上考虑过为此节点对象使用graphDB。而其他表格使用经典SQL,但我不确定这是值得大惊小怪的
答案 0 :(得分:0)
虽然我不知道如何实施兄弟姐妹"然而,这里是如何有许多自我指涉的多对多关系:
Connection = Table('connection',
Column('child_id', String, ForeignKey('node.id')),
Column('parent_id', String, ForeignKey('node.id')),
UniqueConstraint('parent_id', 'child_id', name='unique_usage')
)
class Node(Model):
id = Column(String, primary_key=True)
name = Column(String)
# this is the result list of type Node
# where the current node is the "other party" or "child"
parents = relationship('Node', secondary=Connection,
primaryjoin=id == Connection.c.parent_id,
secondaryjoin=id == Connection.c.child_id)
# this is the result list of type Node
# where the current node is the "parent"
children = relationship('Node', secondary=Connection,
primaryjoin=id == Connection.c.child_id,
secondaryjoin=id == Connection.c.parent_id)
基本上,对于每个想要的多对多关系,使表格表示关系,然后将关系添加到您的模块。你可以为每一个人提供双向关系
稍后当我想出如何制作兄弟姐妹时,我会编辑我的答案