这是一系列文章的目录,对于一个合格的 CRUD 程序猿/媛、码农、IT民工,更高效的进行 CRUD 是我们孜孜不倦的追求!本文是系列文章的序文,首先介绍各技术的亮点,再在之后的单独文章里详细介绍各技术的功能、优势、技巧等……通过对这 4 个主题的介绍,增进我们更好的进行 CRUD 开发。
PostgreSQL
本系列文章以 PostgreSQL(以下简称:PG)为例讲解 SQL,对于 CRUDer ,SQL 是基础中的基础!我们应逃出 ORM 的束缚,在 SQL 的海洋里乘风破浪。这里首先介绍 PG 的其中 4 个亮点技术:
数组
其实 JDBC 标准本身是支持数组的,而且大部分数据库也支持数组类型,但日常开发中这个特性使用得还是比较少。在业务建模中应用数组是很常见的需求,比如一篇文章的 TAG 标签列表、组织的管理员(用户ID)列表等很多对于事实表需要存储少量列表数据的情况。而对于列表数据很多的情况使用数组存储就不大合适,继续使用一张关系表是个有效的解决方案,比如组织内的成员列表,因为一个组织内的成员可能很多,可能成千上万;这么大的一个数组是不必要的,而且通常业务上也不会一次性对这么大的一个数组进行查询或处理。
在了解了数组类型的适用范围后,我们来看看 PG 里具体怎样定义和使用数组。PG 的数组类型是一个完备的类型,支持几乎所有的类型的数组,如:int[]
、text[]
、numeric[]
、timestamp[]
等。可以看到,要声明一个列为数组类型,只需要在普通的类型后面加个中括号 []
即可。我们可以 通过中括号并由 array
修饰 的方式来定义一个数组:
insert into t_test(topic, tags, user_ids, create_time)
values ('topic-002', array ['Java','Scala','Javascript','SQL'], array [2,3,4], now());
JSON
现在,越来越多的关系型数据库支持 JSON 了,这使关系型数据库在某种程度上具备了 NoSQL 的特性(灵活性),同时还拥有 NoSQL 不具备的关联查询、事物等易用的特性。可以说,在 PG 里使用 JSON(jsonb
)类型会是一个比使用 MongoDB 更好的一个选择!因为 PG 的 JSON 融合了 NoSQL 数据库的模式灵活性,同时还具备关系型数据库的关系查询、事物、索引等能力,MongoDB 实际上在创建二级索引后性能非常的差,至于 K/V ,有很多比 MongoDB 更好的选择……
PG 里有两种 JSON :
jsonb
:将解析后的 JSON 结构以二进制的方式存储,类型 MongoDB 的 BSON 那样,有查询优化,同时可以为某些字段创建索引;json
:按字符串存储,在每次使用时再转换成 JSON,写入速度更快,