众所周知,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 那种好太多了么!