2012-03-09 4 views
1

Je suis sur une application pseudo-sociale.
Nous avons 3 tables:Gérer un scénario (MySQL)

Users: _id_, username, password, email 
Movies: _id_, title, synopsis 
Followers: __(#user_id1, #user_id2)__, timestamp 
U_Movies: __(#user_id, #movie_id)__, rating, timestamp 

Nous voulons ajouter une ligne de temps à notre application, le calendrier simple, avec des activités récentes. Nous ne voulons pas de chronologie personnalisée (pas de messages), seulement des activités.

Quelle serait la meilleure façon de "créer" cette chronologie?
Serait-il, en créant une table « Timeline » avec toutes les activités écrites (faire un INSERT INTO timeline quand il y a un INSERT INTO followers et U_Movies?), Ou d'obtenir avec MySQL et JOIN ON derniers adeptes d'activités (avec l'horodatage, qui je pense serait lourd s'il y a beaucoup d'entrées et d'utilisateurs), et un autre conseil?

Nous vous remercions de votre aide!

Répondre

1

J'ai fait une chose similaire récemment. Votre première idée est probablement la meilleure, ajouter des données à une nouvelle table (soit par un déclencheur ou un autre insert)

En supposant que vous ne faites pas et met à jour ou supprime sur la table, il devrait bien évoluer. Vous pouvez également partitionner la table en MySQL en fonction d'une plage de dates. Cela permettra de maintenir la performance au bout de quelques années (ma première version a 140 millions de lignes sur 4 ans et reste rapide)

Editer - Détecter les changements. L'utilisation de l'itinéraire TRIGGER - Before update vous permet de comparer des colonnes, puis d'effectuer une insertion dans la timeline pour vous donner des modifications historiques.

CREATE TRIGGER upd_check BEFORE UPDATE ON account 
    FOR EACH ROW 
    BEGIN 
    IF NEW.rating != OLD.rating THEN 
     INSERT INTO timeline .. 
    END IF; 
END; 
+0

(TRIGGER que je découvrirai) semble être le meilleur (et/ou 2 inserts), mais la chose est que je vais devoir suivre les changements. Par exemple, nous n'avons pas seulement "rating" mais aussi "review", quand quelqu'un veut changer une donnée, le client m'envoie "rating = INT & review = TEXT", alors je mettrai à jour la DB, même si c'est les mêmes données. Existe-t-il un moyen de savoir quelles colonnes ont été mises à jour? Ensuite, je vais insérer dans le «timeline» le type, nouvelle note/critique ... Merci pour votre aide. – Max13

1

Vous pouvez créer TRIGGER qui sera inséré dans la troisième table lors du changement.

Voir TRIGGERS dans docs mysql en ligne.

+0

Merci, semble être une bonne idée – Max13

Questions connexes