Создать другой путь (отношение) к таблице (SQLAlchemy) - PullRequest
0 голосов
/ 08 февраля 2020

Моя цель - перечислить все транзакции (Transaction) для определенного User.

  1. Я могу сделать это косвенно через Wallet, который имеет relationship с Transaction.

  2. Второй способ - сделать это напрямую, добавив user_id к Transaction и создать relationship к User.

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

class User(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    username = db.Column(db.String(255), unique=True)
    email = db.Column(db.String(255), index=True, unique=True)
    pswd_hash = db.Column(db.String(255))

    wallets = db.relationship('Wallet', lazy='dynamic',
                            cascade='all, delete-orphan',
                            backref=db.backref('user', lazy='joined'))


class Wallet(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(64))
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
    currency_id = db.Column(db.Integer(), db.ForeignKey('currency.id'))
    color = db.Column(db.String(7), server_default='#000000')

    currency = db.relationship('Currency')
    transactions = db.relationship('Transaction', lazy='dynamic', backref='wallet')


class Transaction(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    date = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    wallet_id = db.Column(db.Integer(), db.ForeignKey('wallet.id'))
    subwallet_id = db.Column(db.Integer(), db.ForeignKey('subwallet.id'))
    amount = db.Column(db.Float(precision='2'))
    category_id = db.Column(db.Integer(), db.ForeignKey('category.id'))
    description = db.Column(db.String(256))

Какая лучшая практика: создайте другой путь от User до Transaction или я должен получить к нему доступ через Wallet?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...