天天看點

把 PostgreSQL 當做對象資料庫使用

衆所周知,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 那種好太多了麼!