PostgreSQL cho phép bạn tạo các kiểu dữ liệu tùy chỉnh (custom data types) để đáp ứng các nhu cầu cụ thể của ứng dụng hoặc để tối ưu hóa lưu trữ và xử lý dữ liệu. Dưới đây là hướng dẫn chi tiết về cách tạo và sử dụng các kiểu dữ liệu tùy chỉnh trong PostgreSQL.

1. Tạo kiểu dữ liệu tùy chỉnh

Để tạo một kiểu dữ liệu tùy chỉnh trong PostgreSQL, bạn sử dụng câu lệnh CREATE TYPE. Có nhiều loại kiểu dữ liệu tùy chỉnh mà bạn có thể tạo, bao gồm kiểu composite, kiểu enum và kiểu domain.

a. Kiểu composite

Kiểu composite cho phép bạn nhóm nhiều trường dữ liệu thành một kiểu duy nhất.

Cú pháp:

CREATE TYPE type_name AS (
    field1 data_type1,
    field2 data_type2,
    ...
);

Ví dụ:

CREATE TYPE address AS (
    street VARCHAR(100),
    city VARCHAR(50),
    zip_code VARCHAR(10)
);

b. Kiểu enum

Kiểu enum cho phép bạn định nghĩa một tập hợp các giá trị hợp lệ.

Cú pháp:

CREATE TYPE type_name AS ENUM ('value1', 'value2', ...);

Ví dụ:

CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral');

c. Kiểu domain

Kiểu domain cho phép bạn định nghĩa các ràng buộc cho kiểu dữ liệu hiện có.

Cú pháp:

CREATE DOMAIN domain_name AS data_type [ CONSTRAINT constraint_name constraint_definition ];

Ví dụ:

CREATE DOMAIN us_zip_code AS VARCHAR(10) CHECK (VALUE ~ '^d{5}(-d{4})?$');

2. Sử dụng kiểu dữ liệu tùy chỉnh

Sau khi tạo kiểu dữ liệu tùy chỉnh, bạn có thể sử dụng nó trong các bảng, truy vấn và hàm.

a. Sử dụng kiểu composite trong bảng

CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    address address  -- sử dụng kiểu composite
);

Chèn dữ liệu:

INSERT INTO employees (name, address) 
VALUES ('John Doe', ('123 Main St', 'Springfield', '12345'));

b. Sử dụng kiểu enum trong bảng

CREATE TABLE feedback (
    id SERIAL PRIMARY KEY,
    comment TEXT,
    mood mood  -- sử dụng kiểu enum
);

Chèn dữ liệu:

INSERT INTO feedback (comment, mood) 
VALUES ('Great service!', 'happy');

c. Sử dụng kiểu domain trong bảng

CREATE TABLE customers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    zip_code us_zip_code  -- sử dụng kiểu domain
);

Chèn dữ liệu:

INSERT INTO customers (name, zip_code) 
VALUES ('Jane Doe', '12345-6789');

3. Sử dụng kiểu dữ liệu tùy chỉnh trong truy vấn

Bạn có thể sử dụng các kiểu dữ liệu tùy chỉnh trong các truy vấn như bình thường.

Ví dụ với kiểu composite:

SELECT id, name, (address).street AS street 
FROM employees 
WHERE (address).city = 'Springfield';

Ví dụ với kiểu enum:

SELECT * FROM feedback 
WHERE mood = 'happy';

4. Xóa kiểu dữ liệu tùy chỉnh

Để xóa một kiểu dữ liệu tùy chỉnh, bạn sử dụng câu lệnh DROP TYPE.

Cú pháp:

DROP TYPE type_name;

Ví dụ:

DROP TYPE mood;

Kết luận

Việc tạo và sử dụng các kiểu dữ liệu tùy chỉnh trong PostgreSQL cho phép bạn lưu trữ và xử lý dữ liệu một cách linh hoạt và hiệu quả. Bằng cách sử dụng các kiểu composite, enum và domain, bạn có thể định nghĩa dữ liệu theo cách phù hợp nhất với yêu cầu ứng dụng của mình.