我正在尝试设计一个Postgres数据库,用于保存有关用户的各种信息,并看到两种明显的方法 - 特别是不同的多关系。
将基本用户数据存储在 user_info 表中。在单独的表格中,存储许多关系,例如某人所在的学校,他们工作的地方等等。会有很多这样的表格(很容易添加一些东西,比如某人去过的地方,他们读过的书籍等等。我希望这会增长到一个相当大的表格列表)。
在主 user_info 表中,存储一个JSON blob(当然是正确组织的),包含所有这些附加信息。
我应该选择以下两个选项中的哪一个?当然,阅读性能更重要。我知道JSON通常比普通的关系表慢,但我不确定从很多不同的表中查找信息(如选项1中)将比获取单个json blob并在浏览器中显示它更慢。另外需要注意的是,Postgres中的JSONB格式实际上有很好的索引选项。
更新: 根据一些评论,需要使用graphdb:我应该澄清关于技术选择的不的问题(rdbms vs graph db)。但是关于给定技术(rdbms)的数据类型的选择。
答案 0 :(得分:0)
当你不知道你要存储的数据或者它将如何被使用时,NoSQL非常适合,或者它非常适合列表/哈希模型。当您对数据有很多确定性,如何使用数据以及何时适合关系模型时,关系数据库非常适用。我建议采用混合方法,特别是PostgreSQL 9.2's JSON performance improvements。
例如,为People
,Schools
,Work
和Places
制作表格,并在它们之间连接表格。 People.name
和Places.address
等字段是普通列。喜欢"一个人的宠物名单"将其存储为TEXT
或JSON
字段的数组,直到您认为需要Pets
表为止。任何额外的信息,你都不会立即知道你将要做什么,以及#34;学校的捐赠有多大?"放入JSON元数据列。
使用模型类可以重构数据库,而不必担心触及数据库的每一段代码。只需确保对表结构做出假设的所有代码都进入模型方法。