İlk etapta aklıma dizilerde tutmak geldi. Followa bastığında karşıdakini kullanıcının follow dizisine eklensin. Unfollowa bastığında ise unfollow dizisine eklensin tabi bu unfollow dizisi görünmez olacak ama sonra şöyle bir şey doğacak bir kişinin takip etmediği tüm kullanıcılar o kişinin unfollow dizinine düşecek otomatiktan ve bu da projeyi şişirir diye düşünüyorum. Maalesef NoSQL hakkında bilgim yok..
DB de cell icinde dizi tutmak dogru bir practice degil. Atomic yapiyi bozuyorsun, ACID'e aykiri. (
ACID Properties in DBMS - GeeksforGeeks )
Ayri bir 2 column'lu tablo yapip tutabilirsin, ki zaten ManyToMany bu isi yapiyor. FK indexi atarsin her birine.
Unfollow dizisi tutmak basli basina gereksiz bir yuk olur sistemde. Kullanici listesi arttikca dehset uzun unfollow listeleri olacak, bence o fikri kafandan bir an once cikar : )
Genel yapi olarak yazilim mimarisinde RDBMS yi cok fazla write yapan islemlerde kullanmaktan kaciniriz cunku write cok pahali bir islemdir. Follow / Unfollow islemleri de surekli write yaptigi icin bu isin icin ozellestirilmis farkli database cozumleri var. Dedigim gibi bu aklinin bir kenarinda bulunsun, ileride isler ciddilesirse bunlari dusunursun, simdilik gerek yok, herhangi bir RDBMS yeterince hizli sekilde isini gorecektir.
Follow edilebilecek seyleri abstrakt bir entity olarak "Followable" seklinde tutarsin, follow eder, follow edilen ve entity'nin tipini tutarsin. Ornegin bu yapiyi kullanarak bir konuya, bir yoruma ya da bir kisiye follow yapabilir herhangi bir user. Ornegin attigi yoruma biri cevap verdiginde de ayni yapi uzerinden notification gonderebilirsin.
Son 2 paragrafi basit bir proje icin gozardi edebilirsin. Person ve Person_Follow_List gibi 2 tabloyla halledilebilir basitce.