python - 《flask web 开发》一书,数据库中多对多关系的实现问题?
ringa_lee
ringa_lee 2017-04-18 10:24:21
0
2
584

问题原型是,现在要实现用户之间的互相能够关注的功能,反应到数据库中是一个多对多的关系,书里引入了第三个关联表,模型是这么定义的(用户表是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_lee
ringa_lee

ringa_lee

répondre à tous(2)
黄舟

Utilisez Colonne pour définir une colonne. Le nom de la classe est le nom de la variable à laquelle vous l'attribuez. Si vous souhaitez utiliser un nom différent dans la table, vous pouvez fournir une chaîne du nom de colonne souhaité comme premier argument facultatif. Les clés primaires sont marquées par Primary_key=Ture. Plusieurs clés peuvent être marquées comme clés primaires, auquel cas elles servent de clés primaires composites.

Je l'ai vu dans la documentation SQLAlchemy, donc l'utilisation ici devrait être une clé primaire composite.

阿神

Une table n'a qu'une seule clé primaire et plusieurs clés primaires ne peuvent pas être définies en même temps.
Follower_id et follow_id doivent être définis comme des clés uniques, c'est-à-dire une clé unique.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!