2015-09-26 24 views
0

我试图设计一个Postgres数据库来保存关于用户的各种信息,并查看两种明显的方式来解决这个问题 - 特别是不同的多关系。针对复杂用户配置文件的JSON或关系表

  1. 存放在USER_INFO表中的基本用户数据。在单独的表格中,存储许多关系,比如有人就读的学校,他们工作的地点等等。会有很多这样的表格(很容易添加诸如访问过什么地方的东西,他们读过什么书籍等等等等。我希望这会增长到一个相当大的表格列表)。

  2. 在主要的user_info表中,存储了一个JSON blob(当然组织得当)与所有这些附加信息。

我应该选择哪两个选项?当然,阅读表现更重要。我知道JSON通常比普通关系表慢,但我不确定是否从许多不同的表中查找信息(如选项1)会比获取单个json blob并在浏览器中显示它慢。另外需要注意的是,Postgres中的JSONB格式实际上有很好的索引选项。

更新: 以下一些意见,一个graphdb是需要使用什么样的:我要澄清的问题是有关技术(RDBMS VS图DB)的选择。但是关于给定技术(rdbms)的数据类型的选择。

+0

您既不需要[图形数据库](http:// neo4j。com/books/graph-databases /),哪种证明这个问题的是**主题** *,因为它是基于**的意见**,**要求建议**和**太宽**所有同时* –

+0

对不起@JarrodRoberson我想你误会了。我不是在问我需要使用什么数据库。这个问题明确地说明了什么是数据格式。并且你删除了postgresql标签 - 这是在那里指定问题的范围。 – Yogesch

+0

@JarrodRoberson虽然我理解你提出图表db的理由,但我更喜欢传统的解决方案 - 主要是出于稳定性,社区和易用性的原因。 FWIW,由于实际的原因,在决定切换到Postgres之前,我曾经广泛地考虑过一个图形db,尽管图形db在许多方面使生活更轻松。对不起,我不认为所有这些细节都与这个问题有关。 – Yogesch

回答

0

当您不知道要存储什么数据或将如何使用数据时,NoSQL非常适用,或者它非常适合列表/散列模型。关系数据库非常适用于您对数据有很多确定性,如何使用数据以及何时适合关系模型。我会建议采用混合方式,尤其是PostgreSQL 9.2's JSON performance improvements

  • 为你认识的事情建立传统关系是坚实的。
  • 利用JSON处理您想要捕获但不确定需要的数据。
  • 对于简单列表,请使用PostgreSQL数组或JSON而不是连接表。
  • 摘要这一切都背后的模型类。
  • 随着您对数据的更多了解,请更改其存储方式。

例如,使表为PeopleSchoolsWorkPlaces以及它们之间的连接表。像People.namePlaces.address这样的字段是正常的列。诸如“人的宠物列表”之类的东西将其存储为TEXTJSON字段的数组,直到您觉得您需要Pets表。任何额外的信息,你都不会立即知道你要做什么,比如“学校的捐赠有多大”放到JSON元数据列中。

使用模型类可以重构数据库,而不用担心触及数据库的每段代码。只要确保对表结构进行假设的所有代码都纳入模型方法即可。

+0

谢谢!这回答了我的问题 - 直到我足够了解它作为一个单独的表格形式化之后,在此期间使用JSON。 – Yogesch