joh*_*ohn 5 sql postgresql database-design entity-relationship relational-database
我试图在 Twitter 和 Instagram 等社交媒体平台之后在 Postgresql 中建模一个数据库。
我有以下要求:
现在我意识到如果用户不断以评论的形式回复其他用户,我们可以拥有深度嵌套的评论。我想出了一些自引用表,它们都继承自一个公共实体表。到目前为止,这是我的实现:
^^ 我知道可以“喜欢”另一个人“喜欢”或评论“喜欢”,这不是必需的。为了防止这种情况,我想我可以在应用程序代码级别强制执行这些约束。保留选项总是更好,以防我们将来可能想要实施它们,对吗?
我的问题是,这是一个好的数据库实现吗?是否有我没有看到的用例和陷阱?设计是否适合用例?
您的基本模式结构可能可用于您提到的基本用例。我只是缺少评论和帖子之间的联系(哪个评论属于哪个帖子)。您还可以认为评论和帖子是同一类型的对象,只是通过与它们拥有(或不拥有)的另一个帖子的关系来区分。另外——更重要的是:
如今,您应该考虑使用图形数据库来对社交媒体领域进行建模。正如您在模式中看到的,大多数数据都是表之间的链接,而关系数据库实际上并不是最擅长高度链接的数据。这是因为 SQL 查询最终可能会包含大量联接,一旦图形达到一定的大小和深度,这些联接可能会成为性能问题。
还可以将关系数据库(或 nosqldb)与图形数据库结合使用,在图形数据库中,您仅对图形内的链接网络进行建模,而在常规数据库中则对更多面向表的数据进行建模。
有关图形数据库的流行示例,请参阅此。
有关为什么图形数据库在图形建模方面优于关系数据库的更多信息,请阅读此和此。