对于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组合到一个列中,因为这没有多大意义。然而,我的问题是:我想在这里实现的目标是否可行?有没有更好的方法来使用不同的数据库系统?或者我应该完全重新考虑我的数据库设计?