SQLAlchemy и настройка Postgresql таблиц со столбцами, хранящими массивы данных - PullRequest
0 голосов
/ 19 февраля 2020

Я работаю над проектом, в котором нам нужно создать простой API на основе базы данных. Мой проект связан с бейсболом и будет хранить данные об игроке, команде и агенте игрока.

Моя цель - база данных с 3 таблицами: players, teams и agents. teams до players - это один ко многим, а от agents до players - это один ко многим. Таблица players имеет внешние ключи team_id и agent_id, связанные с каждой из двух других таблиц.

Здесь я потерялся. В таблице teams мне нужен столбец, в котором хранится массив player_id с. В основном это будет состав команды. В таблице agent я бы хотел, чтобы столбец clients также содержал массив player_id s, который будет списком клиентов. У меня проблемы с реализацией этого. Должны ли эти столбцы быть внешними ключами, ссылающимися на player.id, или список команды и список клиентов агента должны быть разбиты на отдельные таблицы? Будет ли моя идея работать?

Вот мои модели, код которых не имеет отношения к моему вопросу (имя, должность, местоположение и т. Д. c):

class Player(db.Model):
    __tablename__ = 'players'

    id = db.Column(db.Integer, primary_key=True)
    team_id = db.Column(db.Integer, db.ForeignKey('teams.id'),
                        nullable=False)
    agent_id = db.Column(db.Integer, db.ForeignKey('agents.id'),
                         nullable=False)

    team = db.relationship(
        'Team', backref=db.backref('player', cascade='all,delete'))

    agent = db.relationship(
        'Agent', backref=db.backref('player', cascade='all,delete'))
class Team(db.Model):
    __tablename__ = 'teams'

    id = db.Column(db.Integer, primary_key=True)
    players = db.Column(db.ARRAY(db.String), default=[])
class Agent(db.Model):
    __tablename__ = 'agents'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    clients = db.Column(db.ARRAY(db.String), default=[])
...