行类型(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