2015-09-26 48 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