Моя цель - перечислить все транзакции (Transaction
) для определенного User
.
Я могу сделать это косвенно через Wallet
, который имеет relationship
с Transaction
.
Второй способ - сделать это напрямую, добавив 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
?