Web sitem için bir sosyal grafik hazırlıyorum. Kullanıcılar, her bir tarafın diğerini bağımsız olarak takip edebileceği ilişkiler (takip eden/takip edilen form) oluşturacaktır. Benim kullanıcıların tablo şöyle görünür: Bu model nasıl SQL Modelleme Takipçi/Takip Eden İlişkiler Sosyal Ağ için
Users table
- UserId (PK, Auto-incrementing integer)
Düşünme
, ben gibi birçok alternatifleri, ile geldim:(a) Bir tablo bir şekilde her 'takip' eylemi tutar ayrı satır.
Bu, birçok kullanıcıya verilen çok sayıda satır yaratacağı dezavantajına sahiptir.
(b) Bir tablo, her kullanıcı, bir CSV veya diğer yapı olarak takip ediyor kullanıcıların listesini tutar: (? Ve masraflı)
Relationships table
- FollowerId (FK to Users.UserId)
- FollowingUsers (e.g. 2,488,28,40)
Bu sorgular çok daha karmaşık olacağını dezavantajı var. Ben de ... vb dize değerlerini sırasını korumak zorundayız
kullanıcı ilişkisinin ya 'tarafında' olabilir (c) satır başına bir ilişki:
Relationships table
- Party1Id (FK to Users.UserId)
- FollowingParty2 (boolean)
- Party2Id (FK to Users.UserId)
- FollowingParty1 (boolean)
Bu, satırları (a) üzerinden kaydeder, ancak sorgular daha karmaşıktır, çünkü kullanıcı taraf olabilir.
hem benzeri listeleri gibi ardından ' 'Aşağıdaki' ve Yerleştirme (d), (b)
Relationships table
- UserId (FK to Users.UserId)
- FollowingUsers (e.g. 2,488,28,40)
- FollowedBy (e.g. 2,488,28,40)
Bu, tüm dünyanın en iyisi gibi görünüyor, ama şimdi Birden fazla satır güncellemek için işlemler kullanmak zorunda .
"Facebook'un sorunlarım benim sorunum değil" in farkında olsa da, büyük bir boyuta ölçeklemek istediğimi varsayarsak - hangi seçenek ya da başka bir seçenek tercih edilir?