衆所周知,PostgreSQL 是功能最為強大的開源資料庫,以關系型為基礎,添加了很多面向對象的功能,并且支援的資料類型可以說是無所不包,就算原生不支援的,也可以由使用者自己進行擴充,以滿足使用者的需求。
PostgreSQL 中的數組類型,就可以發揮很大的作用,有了它的支援,我們便可以把 PostgreSQL 當做一個對象資料庫來使用。
比如我們有以下對象類型:
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 就夠了。
這樣的資料存儲方式,不是比 MongoDB 那種好太多了麼!