PostgreSQL 有很多丰富的开箱即用的数据类型,从标准的数字数据类型、到几何类型,甚至网络数据类型等等。虽然很多人会忽略这些数据类 型,但却是我最喜欢的特性之一。而数组数据类型正如你所期望的,可以在 PostgreSQL 存储数组数据,有了这个特性,你可以在单个表中实现以往需要多个表才能实现的存储要求。

为什么要使用数组来存储数据,如果你是应用开发人员,那么在数据库中使用同样的模型来存储程序中的数据,何乐而不为呢。况且这样的做法还能提升性能。下面我们将介绍如何使用 PostgreSQL 的数组类型。


假设你在一个网站上购买物品,那么你所购买的信息就可以用下面这个表来表示:
 

CREATE TABLE purchases (
  id integer NOT NULL,
  user_id integer,
  items decimal(10,2) [100][1],
  occurred_at timestamp
);

在这个表中,拥有一个数组字段来保持多个商品记录,包括:

  •     购买商品的编号
  •     数量
  •     价格

要往这个表里插入数据的 SQL 如下:
 
INSERT INTO purchases VALUES (1, 37, '{{15.0, 1.0, 25.0}, {15.0, 1.0, 25.0}}', now());
INSERT INTO purchases VALUES (2, 2, '{{11.0, 1.0, 4.99}}', now());
一个更有实际意义的例子是标签的使用,你可以用标签来标识购买的物品:

 

CREATE TABLE products (
  id integer NOT NULL,
  title character varying(255),
  description text,
  tags text[],
  price numeric(10,2)
);

你可使用基本的查询语句来获取数据:

 

SELECT title, unnest(tags) items FROM products


你还可以使用 Postgres 的 Gin and Gist  索引来根据指定的标签快速搜索产品:
 

-- Search where product contains tag ids 1 AND 2
SELECT *
FROM  products
WHERE  tags @> ARRAY[1, 2]
 
-- Search where product contains tag ids 1 OR 2
SELECT *
FROM  products
WHERE  tags && ARRAY[1, 2]

风云阁资源网 Design By www.bgabc.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
风云阁资源网 Design By www.bgabc.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。