Дизайн отношений из таблицы в ту или иную таблицу - PullRequest
0 голосов
/ 29 августа 2018

Мне нужно составить план между 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.

Есть идеи?

...