PostgreSQL - Loại dữ liệu
Xin chào các bạnfuture database wizards! ? Chào mừng các bạn đến với hành trình thú vị vào thế giới các loại dữ liệu của PostgreSQL. Là một giáo viên khoa học máy tính gần gũi, tôi rất vui được hướng dẫn các bạn qua chủ đề hấp dẫn này. Đừng lo lắng nếu bạn mới bắt đầu lập trình - chúng ta sẽ bắt đầu từ những điều cơ bản nhất và dần dần nâng cao. Vậy, hãy lấy cây phép thuật ảo của bạn (bàn phím) và cùng nhau lặn sâu vào!
Loại số học
Ah, số học - nền tảng của việc tính toán! PostgreSQL cung cấp nhiều loại số học khác nhau để phù hợp với các nhu cầu khác nhau. Hãy cùng khám phá chúng với một số ví dụ thú vị.
Loại số nguyên
PostgreSQL cung cấp bốn loại số nguyên:
Loại | Kích thước lưu trữ | Phạm vi |
---|---|---|
smallint | 2 bytes | -32768 đến +32767 |
integer | 4 bytes | -2147483648 đến +2147483647 |
bigint | 8 bytes | -9223372036854775808 đến +9223372036854775807 |
serial | 4 bytes | 1 đến 2147483647 |
Hãy tạo một bảng để lưu trữ thông tin về sách yêu thích của chúng ta:
CREATE TABLE favorite_books (
id serial PRIMARY KEY,
title VARCHAR(100),
publication_year smallint,
pages integer,
isbn bigint
);
Trong ví dụ này:
-
id
sử dụngserial
, tự động tăng cho mỗi mục mới. -
publication_year
sử dụngsmallint
vì sách không quá cũ (xin lỗi, các cuốn sách cổ!). -
pages
sử dụnginteger
cho độ dài sách. -
isbn
sử dụngbigint
cho những số ISBN dài.
Loại số động điểm
Để có độ chính xác thập phân:
Loại | Mô tả |
---|---|
real | 6 chữ số thập phân chính xác |
double precision | 15 chữ số thập phân chính xác |
Hãy thêm một số chi tiết vào bảng sách của chúng ta:
ALTER TABLE favorite_books
ADD COLUMN rating real,
ADD COLUMN price double precision;
Bây giờ chúng ta có thể lưu trữ rating sách (ví dụ: 4.5 sao) và giá cả chính xác.
Loại số chính xác tùy ý
Để có độ chính xác极高:
CREATE TABLE scientific_constants (
name VARCHAR(50),
value numeric(1000, 900)
);
INSERT INTO scientific_constants (name, value)
VALUES ('Pi', 3.14159265358979323846264338327950288419716939937510);
numeric(1000, 900)
cho phép đến 1000 chữ số tổng cộng và 900 sau dấu phẩy. Hoàn hảo cho những người yêu thích pi!
Loại tiền tệ
Tiền bạc làm cho thế giới quay, và PostgreSQL có đúng loại cho nó:
CREATE TABLE product_prices (
product_name VARCHAR(50),
price money
);
INSERT INTO product_prices (product_name, price)
VALUES ('Fancy Pen', '$9.99');
Loại money
tự động xử lý các ký hiệu tiền tệ và dấu phẩy tách.
Loại ký tự
Văn bản ở khắp mọi nơi trong cơ sở dữ liệu. PostgreSQL cung cấp ba loại ký tự chính:
Loại | Mô tả |
---|---|
character(n) | Độ dài cố định, điền空白 |
varchar(n) | Độ dài thay đổi với giới hạn |
text | Độ dài không giới hạn |
Hãy sử dụng chúng trong cơ sở dữ liệu sách của chúng ta:
ALTER TABLE favorite_books
ADD COLUMN author character(50),
ADD COLUMN description varchar(500),
ADD COLUMN full_text text;
-
author
cố định ở 50 ký tự (hy vọng đủ cho "J.K. Rowling"!). -
description
có thể thay đổi nhưng không vượt quá 500 ký tự. -
full_text
có thể lưu trữ toàn bộ sách nếu muốn (nhưng đừng làm thế, được không?).
Loại dữ liệu nhị phân
Đôi khi, bạn cần lưu trữ dữ liệu nhị phân thô. Đó là khi bytea
xuất hiện:
ALTER TABLE favorite_books
ADD COLUMN cover_image bytea;
-- Chèn một hình ảnh (giả định đây là dữ liệu nhị phân thực tế)
UPDATE favorite_books
SET cover_image = '\x89504E470D0A1A0A'
WHERE id = 1;
Điều này cho phép chúng ta lưu trữ ảnh bìa sách trực tiếp trong cơ sở dữ liệu.
Loại ngày/giờ
Thời gian là yếu tố quan trọng, và PostgreSQL có nó:
Loại | Mô tả |
---|---|
date | Ngày (không có thời gian trong ngày) |
time | Thời gian trong ngày (không có ngày) |
timestamp | Cả ngày và giờ |
interval | Khoảng thời gian |
Hãy theo dõi khi chúng ta đọc sách yêu thích:
ALTER TABLE favorite_books
ADD COLUMN purchase_date date,
ADD COLUMN reading_start_time time,
ADD COLUMN last_read timestamp,
ADD COLUMN reading_duration interval;
UPDATE favorite_books
SET purchase_date = '2023-04-01',
reading_start_time = '20:30:00',
last_read = '2023-04-15 22:15:30',
reading_duration = '2 hours 30 minutes'
WHERE id = 1;
Bây giờ chúng ta có thể phân tích thói quen đọc sách của mình! ?⏱️
Loại boolean
True hoặc false, 1 hoặc 0, yes hoặc no - đôi khi cuộc sống là nhị phân:
ALTER TABLE favorite_books
ADD COLUMN is_favorite boolean;
UPDATE favorite_books
SET is_favorite = true
WHERE rating > 4.5;
Đơn giản và hiệu quả!
Loại enum
Khi bạn có một bộ các tùy chọn cố định, enum là người bạn tốt:
CREATE TYPE book_genre AS ENUM ('Fiction', 'Non-Fiction', 'Science', 'History');
ALTER TABLE favorite_books
ADD COLUMN genre book_genre;
UPDATE favorite_books
SET genre = 'Fiction'
WHERE id = 1;
Không còn lỗi chính tả trong tên thể loại!
Loại hình học
Đối với tất cả những người yêu thích hình học:
CREATE TABLE geometric_objects (
id serial PRIMARY KEY,
name VARCHAR(50),
location point,
area box
);
INSERT INTO geometric_objects (name, location, area)
VALUES ('My House', '(10,20)', '((0,0),(100,100))');
Hoàn hảo cho việc bản đồ hóa chiến dịch Dungeons & Dragons của bạn!
Loại địa chỉ mạng
Trong thế giới kết nối của chúng ta, việc lưu trữ thông tin mạng là quan trọng:
CREATE TABLE network_devices (
id serial PRIMARY KEY,
name VARCHAR(50),
ip inet,
mac macaddr
);
INSERT INTO network_devices (name, ip, mac)
VALUES ('My Router', '192.168.1.1', '08:00:2b:01:02:03');
Bây giờ bạn có thể theo dõi tất cả các thiết bị trên mạng của bạn!
Loại chuỗi bit
Đôi khi, bạn chỉ cần làm việc với các bit thô:
CREATE TABLE permissions (
user_id integer,
access_flags bit(8)
);
INSERT INTO permissions (user_id, access_flags)
VALUES (1, B'10110000');
Mỗi bit có thể đại diện cho một quyền khác nhau. Thế nào cho hiệu quả lưu trữ?
Loại tìm kiếm văn bản
PostgreSQL có hỗ trợ tích hợp cho tìm kiếm văn bản:
ALTER TABLE favorite_books
ADD COLUMN search_vector tsvector;
UPDATE favorite_books
SET search_vector = to_tsvector('english', title || ' ' || description);
CREATE INDEX textsearch_idx ON favorite_books USING GIN (search_vector);
Bây giờ bạn có thể thực hiện các tìm kiếm nhanh chóng trên bộ sưu tập sách của mình!
Loại UUID
UUID là tuyệt vời cho các hệ thống phân tán:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE distributed_data (
id uuid DEFAULT uuid_generate_v4(),
data TEXT
);
INSERT INTO distributed_data (data) VALUES ('Some distributed data');
Không còn lo lắng về xung đột ID giữa các máy chủ!
Loại XML
Đối với việc lưu trữ dữ liệu XML có cấu trúc:
CREATE TABLE xml_documents (
id serial PRIMARY KEY,
doc xml
);
INSERT INTO xml_documents (doc)
VALUES (
'<book>
<title>PostgreSQL for Beginners</title>
<author>Your Favorite Teacher</author>
</book>'
);
XML trong cơ sở dữ liệu? Tại sao không!
Loại JSON
Trong kỷ nguyên của các dịch vụ web, JSON là vua:
ALTER TABLE favorite_books
ADD COLUMN metadata jsonb;
UPDATE favorite_books
SET metadata = '{"tags": ["educational", "fun"], "reviews": [{"user": "Alice", "rating": 5}, {"user": "Bob", "rating": 4}]}'
WHERE id = 1;
Loại jsonb
cho phép lưu trữ và truy vấn dữ liệu JSON hiệu quả.
Loại mảng
Đôi khi, bạn cần lưu trữ nhiều giá trị trong một cột:
ALTER TABLE favorite_books
ADD COLUMN keywords text[];
UPDATE favorite_books
SET keywords = ARRAY['database', 'programming', 'awesome']
WHERE id = 1;
Mảng cho phép bạn lưu trữ danh sách các giá trị mà không cần tạo bảng riêng.
Loại phức hợp
Tạo các loại tùy chỉnh của bạn bằng cách kết hợp các loại hiện có:
CREATE TYPE address AS (
street VARCHAR(100),
city VARCHAR(50),
country VARCHAR(50)
);
ALTER TABLE favorite_books
ADD COLUMN publisher_address address;
UPDATE favorite_books
SET publisher_address = ROW('123 Book St', 'Libraryville', 'Bookland')
WHERE id = 1;
Loại phức hợp giúp bạn tổ chức dữ liệu liên quan một cách logic hơn.
Loại khoảng
Khi bạn cần đại diện cho một khoảng giá trị:
CREATE TABLE hotel_bookings (
id serial PRIMARY KEY,
room_number integer,
stay daterange
);
INSERT INTO hotel_bookings (room_number, stay)
VALUES (101, '[2023-07-01, 2023-07-07)');
Loại daterange
giúp bạn dễ dàng kiểm tra các booking trùng lặp!
Loại nhận dạng đối tượng
Các loại này được sử dụng nội bộ bởi PostgreSQL:
CREATE TABLE table_info (
table_name VARCHAR(50),
oid oid
);
INSERT INTO table_info (table_name, oid)
SELECT 'favorite_books', 'favorite_books'::regclass::oid;
Mặc dù bạn có thể không sử dụng chúng thường xuyên, nhưng chúng rất quan trọng cho các hoạt động nội bộ của PostgreSQL.
Loại giả
Những loại này không phải là loại thực tế, nhưng chúng được sử dụng trong các khai báo hàm:
CREATE FUNCTION multiply_any(anyelement, anyelement)
RETURNS anyelement AS $$
SELECT $1 * $2;
$$ LANGUAGE SQL;
SELECT multiply_any(5, 3); -- Trả về 15
SELECT multiply_any(5.5, 2); -- Trả về 11.0
Các loại giả như anyelement
cho phép bạn định nghĩa các hàm linh hoạt hơn.
Và thế là xong, các học viên hăng hái của tôi! Chúng ta đã khám phá cảnh quan rộng lớn của các loại dữ liệu PostgreSQL. Nhớ rằng việc chọn đúng loại dữ liệu rất quan trọng cho hiệu suất, hiệu quả lưu trữ và tính toàn vẹn của dữ liệu. Nó giống như việc chọn đúng công cụ cho công việc - bạn wouldn't sử dụng một cây búa để treo một bức ảnh, phải không?
Khi bạn tiếp tục hành trình PostgreSQL của mình, bạn sẽ khám phá thêm nhiều chi tiết và mẹo về các loại dữ liệu này. Hãy tiếp tục thử nghiệm, giữ sự tò mò và quan trọng nhất, hãy vui vẻ với cơ sở dữ liệu của bạn! Ai biết, bạn có thể trở thành phù thủy cơ sở dữ liệu tiếp theo trong thị trấn. ?♂️?
Bây giờ, hãy tiến lên và tạo ra những cơ sở dữ liệu tuyệt vời! And remember, trong thế giới của PostgreSQL, mỗi loại dữ liệu đều có vị trí của mình - giống như cách mỗi cuốn sách có vị trí perfect trên kệ sách. Hạnh phúc mã hóa! ??
Credits: Image by storyset