ホームページ  >  に質問  >  本文

python - 《flask web 开发》一书,数据库中多对多关系的实现问题?

问题原型是,现在要实现用户之间的互相能够关注的功能,反应到数据库中是一个多对多的关系,书里引入了第三个关联表,模型是这么定义的(用户表是users,主键定义为id):

class Follow(db.Model):
    __tablename__ = 'follows'
    follower_id = db.Column(db.Integer, db.ForeignKey('users.id'),
                            primary_key=True)
    followed_id = db.Column(db.Integer, db.ForeignKey('users.id'),
                            primary_key=True)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)

Follow表中的每条记录代表着一个user关注另一个user,那么不论是follower_id列还是followed_id列都必然会出现重复。那么:
1.在这种情况下为何还能定义成主键呢?
2.如果不定义成主键会有什么不同?(是不能用了还是性能下降还是什么别的?)

ringa_leeringa_lee2740日前591

全員に返信(2)返信します

  • 黄舟

    黄舟2017-04-18 10:26:21

    列を定義するには、列を使用します。クラス名は、クラスを割り当てる変数の名前です。テーブル内で別の名前を使用する場合は、オプションの最初の引数として目的の列名の文字列を指定できます。主キーは、primary_key=Ture でマークされます。複数のキーを主キーとしてマークできます。その場合、それらは複合主キーとして機能します。

    SQLAlchemy ドキュメントで見たので、ここでの使用法は複合主キーであるはずです。

    返事
    0
  • 阿神

    阿神2017-04-18 10:26:21

    テーブルには主キーが 1 つだけあり、複数の主キーを同時に設定することはできません。
    follower_id と Following_id は一意のキー、つまり一意のキーとして設定する必要があります。

    返事
    0
  • キャンセル返事