数组和枚举
PostgreSQL 因其可扩展性和多功能性而备受欢迎,除了传统的整数和字符串之外,它还提供了多种数据类型。其中,包括数组和枚举,其为开发者提供了高级的数据建模能力。本文中,我们将深入研究这些复杂的数据类型,并通过免费的 dvdrental sample database 来展示他们的用法和好处。
数组(Array)类型
PostgreSQL 中的数组允许在单个数据库字段中存储多个值。在处理列表或数据集至关重要的场景中,此功能非常宝贵。让我们来看一个实例。假设我们想存储电影以及出演每部电影的演员。我们可以利用数组数据类型来高效地实现这一需求。首先,以下是创建和填充新的“films_with_actors”表的语句:
CREATE TABLE films_with_actors (
film_id SERIAL PRIMARY KEY,
title VARCHAR(255),
actors TEXT[]
);
INSERT INTO films_with_actors (title, actors) VALUES
('Inception', ARRAY['Leonardo DiCaprio', 'Joseph Gordon-Levitt']),
('The Shawshank Redemption', ARRAY['Tim Robbins', 'Morgan Freeman']);
在 Navicat 中,我们可以使用表设计器来创建表:
请注意,如果我们在文本类型后面添加方括号“[]”,Navicat 会将其识别为数组类型,并在保存表时在“维度”字段中添加“1”,表示它是一个一维数组。
创建了表之后,我们将能够添加数据到其中。请确保使用大括号“{}”将数组值括起来,以告诉 Navicat 每个数组中包含哪些值:
在查询中,我们可以通过在方括号内添加所需的索引来引用特定的数组元素。因此,“actors[1]”将获取数组的第一个值:
枚举(Enum)类型
“Enumerated”的缩写,Enum 类型允许开发人员为列定义一组固定的可能值。这增强了数据库模式中的数据完整性和清晰度。让我们通过向“films_with_actors”表添加一个“rating”列来举例说明这一点。我们可以使用以下 DDL 语句为电影评级定义一个枚举类型:
CREATE TYPE rating AS ENUM ('G', 'PG', 'PG-13', 'R', 'NC-17');
ALTER TABLE films_with_actors ADD COLUMN rating rating;
在 Navicat 中,我们可以在表设计器中点击列表上方的“添加字段”按钮来添加新列。在我们使用上面的 CREATE TYPE 语句创建了 rating Enum 之后,我们可以通过从类型下拉列表中选择“(Type)”项,然后从对象类型列表中选择 rating 项:
表的 rating 列中,现在已包含一个我们已定义的枚举值的下拉列表:
总结
PostgreSQL 数组和枚举数据类型为开发人员提供了有效的工具来高效构建复杂的数据结构。通过利用这些高级功能,开发人员可以增强数据完整性,简化查询,并构建更健壮的数据库模式。在下周的博客中,我们将继续探索 PostgreSQL 的高级数据类型并研究 Range 类型。Range 类型提供了一种简洁的方式来表示单个数据库字段中的值范围,其在多个领域(从时间数据到数字间隔)都非常有用。
你是否正在为 PostgreSQL 数据库开发寻找一款易使用的图形化工具?Navicat 16 for PostgreSQL 正好符合你的需求。点击 此处 下载全功能应用程序,免费试用 14 天!