建立多对多关系

5
我有一个多对多的关系,它可以正常工作。然而,现在我需要另一个类与这个多对多关联。
currencies = db.Table('currencies_many',
    db.Column('id', db.Integer, primary_key=True),
    db.Column('currency_id', db.Integer, db.ForeignKey('currencies.id')),
    db.Column('bank_id', db.Integer, db.ForeignKey('banks.id'))
)

class Bank(db.Model):
    __tablename__ = 'banks'
    id = db.Column(db.Integer, primary_key=True)
    bank_name = db.Column(db.String(300))
    currencies = db.relationship('Currency', secondary=currencies,
        backref=db.backref('banks', lazy='dynamic'))

class Currency(db.Model):
    __tablename__ = 'currencies'
    id = db.Column(db.Integer, primary_key=True)
    currency_name = db.Column(db.String(300))

我指的是,例如订单,我需要与多对多进行关联。
class Order(db.Model):
    __tablename__ = 'orders'
    id = db.Column(db.Integer, primary_key=True)
    bank_currency_identification = db.Column(db.Integer, db.ForeignKey('currencies_many.id'))

我该怎么做?在我的例子中,对于“bank_currency_identification”,我没有使用“db.relationship”,这正确吗?

你确实有一个外键。你不需要关联,至少我不知道为什么要这样做。你为什么要把它变成多对多的关系?如果你确实需要它是多对多的,你可以创建另一个表,比如 currencies_many - adarsh
1个回答

2
所以如果我正确理解您的问题,您想从您的订单表引用currencies_many表。 如果是这样,您在与currencies_many表建立外键关系时是正确的。
然而,当您想要从您的银行表查询订单时,您可能会遇到一些麻烦。 我建议,尽管看起来有些冗余,还是创建Order与Bank以及Order与Currency之间的一对多关系。
bank_id = db.Column(db.Integer, db.ForeignKey('bank.id'))
currency_id = db.Column(db.Integer, db.ForeignKey('currency.id'))

然后在Bank类中

orders = db.relationship('Order', backref='bank')

这将为您提供一个更加清晰的查询接口。

bank_orders = bank.orders

此外,这可以让您的数据模型更加清晰。如果不得不在一个中间表中查询订单和货币,那将会很尴尬。个人认为,拥有易于理解的数据模型比节省一些冗余而建立尴尬的关系更为重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接