Giriş

Bu bölümde Twitter benzeri bir takip etme (followers) özelliği uygulamaya eklenecek. Veritabanı ilişki türleri gözden geçirilecek, many-to-many ilişkisi ve self-referential (öz referanslı) ilişki tasarımı, karmaşık SQL sorguları ve birim testleri ele alınacak.


Veritabanı İlişki Türleri

One-to-Many (Bir-Çok)

Bir kullanıcının çok sayıda gönderisi olabilir. "Çok" tarafında yabancı anahtar (foreign key) tutulur. Bölüm 4'te Post.user_id ile uygulandı.

Many-to-Many (Çok-Çok)

Bir kullanıcı çok sayıda kullanıcıyı takip edebilir; bir kullanıcının da çok sayıda takipçisi olabilir. Bu ilişki için ara tablo (association table) gerekir.

Self-Referential (Öz Referanslı) İlişki

Takip etme özelliğinde her iki taraf da User modelidir. Bir sınıfın kendi örnekleriyle ilişkilendirilmesi self-referential relationship olarak adlandırılır.


Veritabanı Modeli

app/models.pyfollowers Ara Tablosunu Ekle

User sınıfının üstüne ekle:


app/models.pyUser Sınıfına İlişkileri Ekle

class User(UserMixin, db.Model):
    # ...
    following: so.WriteOnlyMapped['User'] = so.relationship(
        secondary=followers, primaryjoin=(followers.c.follower_id == id),
        secondaryjoin=(followers.c.followed_id == id),
        back_populates='followers')
    followers: so.WriteOnlyMapped['User'] = so.relationship(
        secondary=followers, primaryjoin=(followers.c.followed_id == id),
        secondaryjoin=(followers.c.follower_id == id),
        back_populates='following')