请您描述创建Facebook“喜欢”功能表的最佳方式,我可以存储用户喜欢的内容以及如何存储? (columsn,pks等) 另外,如果可能的话,我想知道从该表中检索数据的最佳和最快的方法是什么。
谢谢。
答案 0 :(得分:1)
因为可以添加/删除“喜欢”,它们与特定用户相关,用户通常只能“喜欢”一次,创建这样的表是有意义的:
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)
)
这里有很多考虑因素。 post_id和user_id一起构成了一个很好的自然键,但很容易出现碎片。拥有单独的IDENTITY键不会增加太多,因为post_Id上的重要索引仍然会碎片化。可能值得在User_id上使用另一个索引,以便优化器可以快速找到用户的喜好,但是更好地调整一些真实的数据和查询计划。
除了这个表,我还会在Posts
记录中缓存喜欢的累计总数,这样您就不必{child} JOIN
和SUM
所有喜欢每当你展示某些东西时,这会很快变得昂贵。您可以使用触发器维护该值,或者将代码放在DAL中以保持该值。