Kullanıcı-spesifik aktivite beslemeleri için optimal MySQL tasarım

0 Cevap php

Ben site çapında ve kullanıcı-spesifik aktivite beslemeleri hem yapıları bir web sitesi inşa ediyorum. Ben aşağıda yapısını görmek ve benim çözüm iş yapıyor olup olmadığı konusunda size fikir paylaşmak umuyoruz. Bu şu anda bir ana tabloda kayıtlı olmayan kullanıcılara birden fazla türde olması gerçeği ile karmaşık. Kullanıcıların türleri ben çok fazla sorun düşünürdüm oldukça farklı ve kullanıcı meta-veriler için birden çok farklı tablolar inşa olmasıdır. Buna ek olarak, üzerinde hareket edilebilir içerik birden çok türü vardır, ve faaliyet birden fazla türde (vb, yorumlama, sunma, aşağıdaki).

Her şey ana besleme masaya açmış ve ben sadece bir listesini oluşturmak çünkü bir site çapında etkinlik linki inşa basittir. Ben bu kadar basit günlükleri MySQL bir ana besleme tablo var:

  1. type of activity;
  2. type of target entity;
  3. id of target entity;
  4. type of source entity (i.e., user or organization);
  5. id of source entity.

(Bu komut, her besleme girişi için uygun tabloya besleme (ler) üreten işaret sadece büyük bir referans tablo).

Kullanıcıya özel yem üreten, ben yem tablo ile ilişkisi tablo katılmak için bir yol anlamaya çalışıyorum, ve sonuçlarını ayrıştırmak için bu kullanıyorum. I ilişkiler 'aşağıdaki' meydana gelen bir ilişki tablosu, sahip, bu besleme tablasının benzer. Kullanıcı b / c tek tip diğer içerik türleri / kullanıcıları takip için izin olsa basittir.

  1. user/source id;
  2. type of target entity;
  3. id of target entity.

Sütunlar 2 ve Besleme 3 ve masa takip aynıdır, ve ben onları maç için çeşitli JOIN yöntemleri kullanın ve sonra kullanıcının sahip takip tablosunda herhangi bir ilişkileri onları sınırlamak için çalışıyorlar. Bu çok başarılı olmamıştır edilir.

Ben kullanıyorum temel sorgu:

 SELECT *
 FROM (`feed` as fe) LEFT OUTER JOIN `follow` as fo
                     ON `fe`.`feed_target_type` = `fo`.`follow_e_type`
                        AND fo.follow_e_id = fe.feed_target_id
 WHERE `fo`.`follow_u_id` = 1 OR fe.feed_e_id = 1
       AND fe.feed_e_type = 'user'
 ORDER BY `fe`.`feed_timestamp` desc LIMIT 10

Bu sorgu da kullanıcının varsayılan aşağıdaki, yürürlükte olduğunu (veri besleme tablosunda oturum olan) kullanıcı yarattı herhangi bir içeriği kapmak için çalışır.

Bu sorgu iş gibi görünüyor, ama bunu almak için bazen beni aldı ve ben bir daha zarif bir çözüm kaçırıyorum eminim. Herhangi bir fikir?

0 Cevap