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

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

membalas semua(2)
黄舟

Gunakan Lajur untuk menentukan lajur. Nama kelas ialah nama pembolehubah yang anda tetapkan. Jika anda ingin menggunakan nama lain dalam jadual, anda boleh menyediakan rentetan nama lajur yang diingini sebagai hujah pilihan pertama. Kekunci utama ditandakan dengan primary_key=Ture. Berbilang kunci boleh ditandakan sebagai kunci utama, dalam hal ini ia berfungsi sebagai kunci utama komposit.

Saya melihatnya dalam dokumentasi SQLAlchemy, jadi penggunaan di sini mestilah kunci utama komposit.

阿神

Sesuatu jadual hanya mempunyai satu kunci utama dan berbilang kunci utama tidak boleh ditetapkan pada masa yang sama.
Id_pengikut dan id_pengikut hendaklah ditetapkan sebagai kunci unik, iaitu kunci unik.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan