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.