从一个表到一个或另一个表的关系设计

时间:2018-08-29 05:46:38

标签: python postgresql database-design sqlalchemy

我需要在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端点的逻辑复杂化。

有什么想法吗?

0 个答案:

没有答案