我将创建一个新项目,我需要用户查看他们的朋友活动和行动,就像Facebook和LinkedIn一样。
允许每个用户进行5种不同类型的活动,每个活动具有不同的属性,例如,活动X可以是公共/私人,而活动Y将被分配给类别。一些行动包括1个用户,其他人有2或3个......等等。最后,我必须在新闻Feed页面上汇总所有这5种不同类型的活动。
如何设计高效的数据库?
我有3个设计,请让我知道你的想法。任何新的想法将不胜感激!
1-单独的表格,因为每个活动有近3-4个不同的列,将每个活动与其自己的表格分开是合乎逻辑的。
优点:清理数据库,易于开发
缺点:需要对数据库进行5次查询并汇总结果以制作单个新闻源页面。
2-一个大表:此表将保存包含许多未使用列的所有活动。将添加一个名为" type"的新数字列。这将表明活动的类型。有些属性可以在HStore字段中组合(因为我们使用的是Postgres),其他属性会被查询很多,所以我不认为将它们包含在HStore字段中是一件好事。
优点:易于拉新闻源。
缺点:在同一个表上有很多读/写,代码会有点麻烦,数据库也是如此。
3-混合:解决方案是制作一个包含所有新闻源的表格,其中包含与其他表格的多态关联,其中包含每项特定活动的详细信息。
优点:整洁的代码和数据库,轻松添加新活动
缺点:加入所有表格以制作单个新闻源!比制作5个不同的查询更好。
当我写这篇文章时,我开始倾向于解决方案2号。请指教!
由于
答案 0 :(得分:1)
我会考虑一个图形数据库。 Neo4j。它将在节点(用户)或链接(关系类型)上添加非常灵活的属性。
对于小型集和少量连接,SQL数据库更快,更合适。但如果您的起点是5个表连接,那么图形数据库看起来更简单并且提供类似的性能(如果不是更好)。