数据库设计的新手,我想知道如何有效地设计像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
我想确保数据库设计是干净且半规模的,无论我们将来添加更多对象(视频,评论,备注等)还是有很多喜欢。
谢谢!
答案 0 :(得分:5)
您可以尝试继承的表方法,请参阅implementing table inheritence以获得更深入的详细信息。
但基本上它就像代码中的继承一样,你有一个基表'Like',然后是'继承'它的表'CommentLike','PhotoLike'等。
参见附图,了解快速模型。
答案 1 :(得分:3)
两个不同的表格。这样,如果你有一个想要添加喜欢的对象,你可以创建一个新表“object_likes”并在那里存储喜欢的内容。
如果你想将它们全部存储在一个表中,你需要一个类型表,它将存储所有类型的对象,并且在你喜欢的表中你必须引用type_id。这可以让你以后添加类型。
对我而言,第一种方法要好得多。