sqlalchemy并在一列中处理多个外键

时间:2018-03-06 17:56:39

标签: python sql sqlalchemy foreign-keys

对于sqlalchemy和RDBMS来说,我有点像诺贝尔,但我最近接受了一个需要它的项目。我想尝试通过ORM做一切。这是我的设置:

class A(Base):
    __tablename__ = 'a'

    id = Column(Integer, primary_key=True)

    b_children = relationship('B')
    x_children = relationship('X')
    y_children = relationship('Y')

class B(Base):
    __tablename__ = 'b'

    id = Column(Integer, primary_key=True)

    c_children = relationship('C')
    x_children = relationship('X')
    y_children = relationship('Y')

    a_parent_id = Column(Integer, ForeignKey('a.id'))

class C(Base):
    __tablename__ = 'c'

    id = Column(Integer, primary_key=True)

    x_children = relationship('X')
    y_children = relationship('Y')

    b_parent_id = Column(Integer, ForeignKey('b.id'))

class X(Base):
    __tablename__ = 'x'

    id = Column(Integer, primary_key=True)

    a_parent_id = Column(Integer, ForeignKey('a.id'))
    b_parent_id = Column(Integer, ForeignKey('b.id'))
    c_parent_id = Column(Integer, ForeignKey('c.id'))

class Y(Base):
    __tablename__ = 'y'

    id = Column(Integer, primary_key=True)

    a_parent_id = Column(Integer, ForeignKey('a.id'))
    b_parent_id = Column(Integer, ForeignKey('b.id'))
    c_parent_id = Column(Integer, ForeignKey('c.id'))

所以A,B和C都是分层的。 A包含B,B包含C,C是该树的结尾。 A,B和C都可以包含X和Y.到目前为止一切都那么好吧?踢球者是X和Y只能一次连接到一个A,B或C.我不希望A和B引用相同的X或Y.我也不希望有多余的列未被使用。在这种情况下,X和Y将始终有两个空列。

我很确定sqlalchemy(或SQL就此问题)无法将多个ForeignKeys组合到一个列中,因为这没有多大意义。然而,我的问题是:我想在这里实现的目标是否可行?有没有更好的方法来使用不同的数据库系统?或者我应该完全重新考虑我的数据库设计?

0 个答案:

没有答案