Bài học theo mô-đun (1/4)
Các kiểu dữ liệu nâng cao và ENUM
Trong bài học trước chúng ta đã biết lệnh CREATE TABLE cơ bản. Bây giờ chúng ta hãy khám phá một số loại dữ liệu nâng cao mà PostgreSQL cung cấp để lập mô hình miền của chúng ta theo cách chính xác và an toàn hơn.
Các loại số và văn bản
PostgreSQL có một số loại cho số và văn bản. Việc chọn đúng sẽ giúp ích cho cả quá trình xác thực và dung lượng lưu trữ.
CREATE TABLE advanced_products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description TEXT,
-- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
price NUMERIC(10, 2) NOT NULL,
featured BOOLEAN DEFAULT FALSE
);TEXTvsVARCHAR(n): Trong Postgres hiệu suất là giống hệt nhau. Bạn chỉ sử dụngVARCHAR(n)khi bạn muốn giới hạn rõ ràng độ dài được chèn ở cấp cơ sở dữ liệu.NUMERIC(10, 2): Hoàn hảo về tiền bạc hoặc độ chính xác số học. Ở đây nó cho phép tối đa 8 chữ số nguyên và 2 số thập phân (tổng cộng là 10). Nếu bạn chèn10.555, Postgres sẽ làm tròn nó thành10.56.
Loại UUID
Đối với số nhận dạng an toàn hiển thị trên web (chẳng hạn như ID công khai trong URL), UUID thường được ưu tiên hơn mức tăng SERIAL cổ điển.
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (Đếm)
Thông thường, một cột chỉ được chứa một trong số ít giá trị được xác định trước (ví dụ: trạng thái đơn hàng: "mới", "đã thanh toán", "đã giao hàng"). Một cách tiếp cận là sử dụng từ khóa CHECK, nhưng PostgreSQL cung cấp các loại ENUM tùy chỉnh.
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');
-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
id SERIAL PRIMARY KEY,
status order_status NOT NULL DEFAULT 'nuovo'
);Điều này đảm bảo rằng không ai có thể chèn trạng thái không hợp lệ, bảo vệ tính nhất quán của dữ liệu.
Hãy thử nó
Tạo bảng 'user_reviews' với: id (SERIAL pk), test_id (UUID với gen_random_uuid() mặc định), điểm (số nguyên không phải null) và nội dung (TEXT). Không có trường nào khác cần các ràng buộc rõ ràng ngoài loại.
Hiển thị gợi ý
Viết TẠO BẢNG user_reviews (...) và sau đó là các trường khác nhau. Hãy nhớ dấu phẩy.
Giải pháp khả dụng sau 3 lần thử
Xem lại bài tập
Trước tiên hãy tạo loại ENUM 'user_role' với các giá trị 'admin' và 'user'. Sau đó tạo bảng 'enum_users' với id (SERIAL pk) và vai trò (loại bạn vừa tạo, KHÔNG phải NULL).
Hiển thị gợi ý
Đừng quên ; để phân tách hai câu lệnh (CREATE TYPE và CREATE TABLE).
Giải pháp khả dụng sau 3 lần thử