2011-11-04 3 views
0

Pourriez-vous décrire la meilleure façon de créer une table de caractéristiques "J'aime" sur Facebook où je peux stocker les goûts des utilisateurs et comment? (columsn, pks, etc) Aussi, si c'est possible, j'aimerais savoir quelle est la meilleure et la plus rapide méthode pour récupérer les données de cette table.Suggestions de conception de tableaux "Facebook like" de SQL Server

Merci.

Répondre

1

Parce que « aime » peuvent être ajoutés/supprimés, ils sont liés à un utilisateur spécifique et un utilisateur peut généralement que « comme » quelque chose une fois, il est logique de créer une table comme ceci:

CREATE TABLE Post_Likes 
( 
    Post_ID int FOREIGN KEY REFERENCES Posts(Post_ID), 
    User_ID int FOREIGN KEY REFERENCES Users(User_ID), 
    created_date datetime, 
    CONSTRAINT PKC__Post_Likes__Post_id__User_id PRIMARY KEY (Post_id, User_id) 
) 

Il y a beaucoup de considérations ici. post_id et user_id forment ensemble une bonne clé naturelle mais seront sujettes à la fragmentation un peu. Avoir une clé IDENTITY distincte n'ajouterait pas grand chose car l'index important sur post_Id serait encore fragmenté. Il peut être utile d'avoir un autre index sur User_id afin que l'optimiseur puisse rapidement trouver l'utilisateur, mais il vaudra mieux s'accorder avec des données réelles et des plans de requête.

En plus de ce tableau, je serais en cache le total cumulé des gens dans le Posts dossier de sorte que vous ne devez pas JOIN à la table des enfants et SUM tous les goûts à chaque fois que vous affichez quelque chose, qui peut obtenir coûteux rapide . Vous pouvez maintenir cette valeur avec un déclencheur ou mettre le code pour maintenir cette valeur dans votre DAL.

Questions connexes