В отношениях «многие ко многим» (в «фляге-sqlalchemy»), как лучше всего записать дополнительную информацию об отношениях? - PullRequest
0 голосов
/ 26 сентября 2019

Надеюсь, это не слишком основано на мнениях, но у меня есть следующие модели:

owners = db.Table('owners',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
    db.Column('project_id', db.Integer, db.ForeignKey('project.id'), primary_key=True))

members = db.Table('members',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
    db.Column('project_id', db.Integer, db.ForeignKey('project.id'), primary_key=True))

class User(Base):
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    projects = db.relationship('Project', secondary=owners, backref=db.backref('owners'))
    memberships = db.relationship('Project', secondary=members, backref=db.backref('members'))
    def __repr__(self):
        return f'<User {self.email}>'

class Project(Base):
    id = db.Column(db.Integer, primary_key=True, nullable=False)
    def __repr__(self):
        return f'<Project {self.name}>'

Из того, что я понимаю, использование вспомогательной таблицы, подобной этой, довольно малообслуживаемо и, как правило, правильный путь., но, как вы можете видеть, у меня есть две разные вспомогательные таблицы для двух разных типов отношений.Пользователь может быть либо владельцем, либо просто стандартным членом группы.

Я рассмотрел использование модели ассоциации, но, похоже, это затруднит управление базой данных.

Есть ли хороший способ записать пользователя как владельца или основного участника без использования двух отдельных вспомогательных таблиц, или это лучший способ сделать это?

...