在 PostgreSQL 中,组合类型允许你将多个字段组合成一个单独的类型。这在某些情况下很有用,尤其是当你有一组相关的数据需要一起处理时。在 PostgreSQL 中,有两种主要的组合类型:行类型和域类型。

行类型(Composite Types)

行类型允许你定义包含多个字段的类型。以下是一个示例:
-- 创建一个包含行类型的表
CREATE TABLE person (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255),
    birthdate DATE
);

-- 创建一个使用行类型的表
CREATE TABLE employee (
    id SERIAL PRIMARY KEY,
    personal_info person,
    department VARCHAR(255)
);

-- 插入数据
INSERT INTO employee (personal_info, department) VALUES
    (ROW(1, 'John', '2000-01-01'::DATE), 'IT');

在上述示例中,person 是一个行类型,包含 id、name 和 birthdate 字段。然后,employee 表使用 personal_info 字段来引用 person 行类型。

域类型(Domain Types)

域类型是对基本数据类型进行命名的方式,并可以添加约束。你可以使用域类型创建一个自定义的类型,它在本质上是对现有类型的包装。以下是一个示例:
-- 创建一个域类型
CREATE DOMAIN email_address VARCHAR(255) CHECK (VALUE ~* '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$');

-- 使用域类型的表
CREATE TABLE person_with_email (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255),
    email email_address
);

-- 插入数据
INSERT INTO person_with_email (name, email) VALUES
    ('John', 'john@example.com');

在上述示例中,email_address 是一个域类型,对 VARCHAR(255) 进行了约束,确保存储的值符合电子邮件地址的基本格式。

组合类型提供了一种组织和复用字段的方法,使数据库设计更灵活和可维护。在某些情况下,使用组合类型可以提高查询的可读性和代码的模块性。


转载请注明出处:http://www.zyzy.cn/article/detail/8164/PostgreSQL