【问题标题】:Database Design for Facebook "likes"Facebook“喜欢”的数据库设计
【发布时间】:2012-02-24 10:53:01
【问题描述】:

数据库设计新手,我想知道如何有效地设计 Facebook 喜欢的东西,同时考虑到未来的可扩展性。

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

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

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

无论我们将来添加更多对象(视频、cmets、笔记等)还是获得大量点赞,我都想确保数据库设计是干净的和半规模证明的。

谢谢!

【问题讨论】:

    标签: database facebook database-design


    【解决方案1】:

    您可以尝试继承表方法,请参阅implementing table inheritence 了解更多详细信息。

    但本质上它就像代码中的继承一样工作,你有一个基表“Like”,然后是从它“继承”的表“CommentLike”、“PhotoLike”等。

    快速模型见附图。

    【讨论】:

    • 注意:父表和子表的 id 相同,在这些情况下用作“外键”。 (阅读 SqlTeam 的博文)
    【解决方案2】:

    两张不同的桌子。这样,如果您以后想要添加喜欢的对象,您只需创建一个新表“object_likes”并将喜欢的内容存储在那里。

    如果您想将它们全部存储在一个表中,则需要一个类型表,该表将存储所有类型的对象,并且在您的 like 表中您必须引用 type_id。这将允许您稍后添加类型。

    对我来说,第一种方法要好得多。

    【讨论】:

    • 另外,如果数据量变大,它会节省空间。例如,拥有一个表会导致行的列具有无用的数据,这些列引用设置为零的类型。
    猜你喜欢
    • 2020-05-30
    • 2010-12-25
    • 2012-08-02
    • 2012-08-27
    • 2017-01-12
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多