我需要在3张桌子之间绘制设计。
最终它需要与PostgreSQL兼容,如果有人为我提供使用SQLAlchemy实现的线索,那将是完美的。
考虑Foo表和Bar表。遵守SQLAlchemy的标准,Foo和Bar之间存在一对多的经典关系:
class Foo(Base):
__tablename__ = 'foo'
id = Column(Integer, primary_key=True)
bars = relationship("Bar", back_populates="foo")
class Bar(Base):
__tablename__ = 'bar'
id = Column(Integer, primary_key=True)
foo_id = Column(Integer, ForeignKey('foo.id'))
foo = relationship("Foo", back_populates="bars")
我需要实现一个与单个Foo OR 或单个Bar链接的表魔术。
Magic表将包含一个字段foo_id和一个字段bar_id:
class Magic(Base):
__tablename__ = 'magic'
id = Column(Integer, primary_key=True)
# [...]
foo_id = Column(Integer, ForeignKey('foo.id'))
foo = relationship("Foo", back_populates="magic")
bar_id = Column(Integer, ForeignKey('bar.id'))
bar = relationship("Bar", back_populates="magic")
但是我需要以某种方式限制以下事实:如果设置了一个,则另一个必须为空。
恐怕这种设计会使我的RESTFull API端点的逻辑复杂化。
有什么想法吗?