衆所周知,PostgreSQL 是功能最爲強大的開源數據庫,以關係型爲基礎,添加了不少面向對象的功能,而且支持的數據類型能夠說是無所不包,就算原生不支持的,也能夠由用戶本身進行擴展,以知足用戶的需求。數據庫
PostgreSQL 中的數組類型,就能夠發揮很大的做用,有了它的支持,咱們即可以把 PostgreSQL 當作一個對象數據庫來使用。數組
好比咱們有如下對象類型:code
class Book { String id; String title; List<Author> authors; } class Author { String id; String name; List<Book> books; }
咱們也能夠建立一樣結構的數據庫表:對象
CREATE TABLE book { id character varying(32) NOT NULL PRIMARY KEY, title character varying(50) NOT NULL, authors character varying[] COMMENT 'ref: author.id', } CREATE TABLE author { id character varying(32) NOT NULL PRIMARY KEY, name character varying(20) NOT NULL, books character varying[] COMMENT 'ref: book.id', }
怎麼樣?是否是和對象類型如出一轍!繼承
這樣,咱們就再也不須要作對象-關係映射了。索引
咱們能夠把內存中的對象結構,原樣保存到數據庫中來。這時候,PostgreSQL 就變成了一個真正意義上的對象數據庫!(別忘了,PostgreSQL 的表也是支持繼承的哦!)內存
全部數據的查詢、獲取都是走的主鍵索引,就算你表中數據量再大,也是毫秒級返回。並且也能夠實現懶加載,只有當你須要子對象的具體數據時,纔會去數據庫裏查詢獲取,不然只返回一個 ID 就夠了。it
這樣的數據存儲方式,不是比 MongoDB 那種好太多了麼!class