Postgresql 用于复杂用户配置文件的JSON或关系表

Postgresql 用于复杂用户配置文件的JSON或关系表,postgresql,database-design,Postgresql,Database Design,我正试图设计一个Postgres数据库,用于保存关于用户的各种信息,并看到两种明显的方法——特别是不同的许多关系 将基本用户数据存储在用户信息表中。在单独的表格中,存储许多关系,如某人就读的学校、工作地点等。将有大量这样的表格(很容易添加一些内容,例如某人访问过什么地方,读过什么书等等。我希望这将增加到一个相当大的表格列表) 在主user_info表中,存储一个JSON blob(当然是正确组织的)和所有这些附加信息 我应该选择这两个选项中的哪一个?当然,阅读性能更重要。我知道JSON通常比普通

我正试图设计一个Postgres数据库,用于保存关于用户的各种信息,并看到两种明显的方法——特别是不同的许多关系

  • 将基本用户数据存储在用户信息表中。在单独的表格中,存储许多关系,如某人就读的学校、工作地点等。将有大量这样的表格(很容易添加一些内容,例如某人访问过什么地方,读过什么书等等。我希望这将增加到一个相当大的表格列表)

  • 在主user_info表中,存储一个JSON blob(当然是正确组织的)和所有这些附加信息

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

    更新:
    下面是一些关于需要使用graphdb的评论:我应该澄清问题是而不是关于技术选择(rdbms vs graph db)。但是关于给定技术的数据类型选择(rdbms)

    当您不知道要存储什么数据或如何使用它,或者它非常适合列表/哈希模型时,NoSQL非常适合。当您对数据、数据的使用方式以及数据适合关系模型时,关系数据库非常适合。我建议采用混合方法,尤其是考虑到以下因素

    • 为你知道的坚实的事物建立传统的关系
    • 对您想要捕获但不确定需要的数据使用JSON
    • 对于简单列表,使用PostgreSQL数组或JSON而不是联接表
    • 这一切都是在模型类后面抽象出来的
    • 随着您对数据的更多了解,请更改其存储方式
    例如,为
    学校
    工作
    场所
    制作表格,并在它们之间连接表格。像
    People.name
    Places.address
    这样的字段是普通列。像“个人宠物列表”这样的东西会将其存储为
    文本数组或
    JSON
    字段,直到您觉得需要
    pets
    表为止。任何你不知道马上要做什么的额外信息,比如“学校的捐赠有多大”放在JSON元数据列中


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

    您也不需要,哪种类型的代码可以证明这个问题是离题的,因为它是基于意见的,需要建议,而且太宽泛了。我想您误解了orry@JarrodRoberson。我不是问我需要使用什么数据库。问题是关于什么样的数据格式。您删除了postgresql标记,该标记用于指定问题的范围。@Jarroderson虽然我理解您提出graph db的理由,但我更喜欢传统的解决方案,主要是出于稳定性、社区性和雇佣方便性的考虑。FWIW,在出于实际原因决定切换到Postgres之前,我已经广泛考虑了graph db,尽管graph db在许多方面让生活变得更轻松。对不起,我不认为所有这些细节都与问题有关。你没有领会我的意思,这不是一个需要辩论或说服的建议,而是一个问题有多离题的例子。不,我明白了。我不明白的是,为什么原始评论中的图形数据库链接到Neo4j页面?他们不是这里唯一的骗子。这一评论似乎比问题或答案更基于观点。FWIW,这个问题已经得到了令人满意的回答。因此,我感谢你们的善意投入。干杯谢谢这就回答了我的问题——在我知道足够将其形式化为一个单独的表之前,暂时使用JSON。