Мне нужно составить план между 3 таблицами.
В конце концов, он должен быть совместим с PostgreSQL, и если кто-то подскажет мне, как реализовать SQLAlchemy, это будет просто идеально.
Рассмотрим стол Foo и стол Bar. Между Foo и Bar существует классическое отношение один ко многим с соблюдением стандартов SQLAlchemy:
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")
Мне нужно реализовать таблицу Magic, которая связана с одним единственным Foo ИЛИ одним единственным 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.
Есть идеи?