【发布时间】:2014-07-08 09:49:20
【问题描述】:
我要创建一个新项目,我需要用户在其中查看他们朋友的活动和操作,就像 Facebook 和 LinkedIn 一样。
每个用户可以进行 5 种不同类型的活动,每个活动都有不同的属性,例如活动 X 可以是公共/私有的,而活动 Y 将被分配到类别。一些操作包括 1 个用户,其他用户有 2 个或 3 个 ...等。最终,我必须在新闻提要页面上汇总所有这 5 种不同类型的活动。
如何设计一个高效的数据库?
我有 3 种设计,请告诉我你的想法。任何新想法都将不胜感激!
1- 单独的表格:由于每个活动有近 3-4 个不同的列,因此将每个活动分开到自己的表格中是合乎逻辑的。
优点: 干净的数据库,易于开发。
缺点: 需要查询数据库 5 次并汇总结果以制作单个新闻源页面。
2- 一张大表:该表将包含所有未使用的列的所有活动。将添加一个名为“类型”的新数字列,该列将指示活动的类型。一些属性可以组合在 HStore 字段中(因为我们使用的是 Postgres),其他属性会被大量查询,所以我认为将它们包含在 HStore 字段中并不是一件好事。
优点: 易于拉取新闻源。
缺点: 在同一张表上进行大量读/写操作,代码会有点混乱,数据库也是如此。
3- 混合:一种解决方案是制作一个包含所有新闻源的表格,并与包含每个特定活动详细信息的其他表格建立多态关联。
优点: 整洁的代码和数据库,易于添加新活动。
缺点: 加入所有表格以制作单个新闻源!仍然比进行 5 次不同的查询要好。
在我写这篇文章时,我开始倾向于解决方案 2。请指教!
谢谢
【问题讨论】:
标签: database postgresql database-design