Facebook的数据库设计“喜欢”

时间:2012-02-24 00:29:54

标签: database facebook database-design

数据库设计的新手,我想知道如何有效地设计像Facebook一样的东西,并考虑到未来的可扩展性。

假设您有3个表:用户,照片和相册。 假设用户可以喜欢照片或相册。

我应该为两种类型的喜欢使用1张表吗? 这可能意味着它会有一个user_id,like_type(0-photo,1-album etc),like_value(无论是内容的id值,是photo_id还是album_id)?

或每个喜欢有两个不同的表格(例如photos_likes和albums_likes)? 只包含user_id和photo / album_id

我想确保数据库设计是干净且半规模的,无论我们将来添加更多对象(视频,评论,备注等)还是有很多喜欢。

谢谢!

2 个答案:

答案 0 :(得分:5)

您可以尝试继承的表方法,请参阅implementing table inheritence以获得更深入的详细信息。

但基本上它就像代码中的继承一样,你有一个基表'Like',然后是'继承'它的表'CommentLike','PhotoLike'等。

参见附图,了解快速模型。

Example of table design

答案 1 :(得分:3)

两个不同的表格。这样,如果你有一个想要添加喜欢的对象,你可以创建一个新表“object_likes”并在那里存储喜欢的内容。

如果你想将它们全部存储在一个表中,你需要一个类型表,它将存储所有类型的对象,并且在你喜欢的表中你必须引用type_id。这可以让你以后添加类型。

对我而言,第一种方法要好得多。