Đây là bài giảng mà lẽ ra tụi mình có thể bắt đầu khoá học này luôn. Nhưng nếu vậy thì mấy bài đầu và bài tập của bạn sẽ siêu chán luôn. Nếu bạn quyết định làm thợ xây một ngày, bạn muốn bắt đầu bằng việc học về các loại và hình dạng gạch, hay là lái thử cần cẩu tháp 30 phút? Đúng rồi đó :)
Học sinh — không phải là cái bình để đổ đầy, mà là ngọn đuốc cần được thắp sáng (và đừng có đốt cháy luôn nha)! Mình không cố kể hết mọi thứ mình biết, mà muốn làm sao cho bạn thấy hứng thú. Và bây giờ chính là lúc hợp lý để bắt đầu làm quen với các kiểu dữ liệu.
Kiểu dữ liệu trong PostgreSQL — là chỉ định loại thông tin nào sẽ được lưu trong một cột cụ thể của bảng. Ví dụ, số, text hoặc ngày tháng. Nó hơi giống như bạn chọn hộp để đựng đồ: hộp nhỏ cho đồ lặt vặt, hộp to cho giày, hộp trong suốt cho chỉ may để nhìn phát biết ngay cái gì ở đâu.
Ví dụ:
- Nếu bạn muốn lưu tuổi của một người, kiểu dữ liệu số sẽ hợp lý.
- Nếu cần lưu tên, bạn sẽ cần kiểu dữ liệu text.
- Còn để ghi lại ngày đăng ký, dùng kiểu dữ liệu ngày là hợp lý nhất.
Tại sao cần kiểu dữ liệu?
Kiểu dữ liệu giúp bạn:
- Giới hạn thông tin nhập vào. Ví dụ, bạn không thể chèn text vào chỗ yêu cầu số.
- Cấu trúc dữ liệu rõ ràng. Biết chính xác cột nào chứa gì thì việc viết query và phân tích thông tin sẽ dễ hơn nhiều.
- Tiết kiệm tài nguyên. Dùng đúng kiểu sẽ giảm bớt việc tốn RAM.
- Giữ độ chính xác. Ví dụ, tính toán tài chính thì cần số có dấu phẩy cố định.
Ví dụ truyền cảm hứng
Hãy tưởng tượng một bảng để lưu thông tin về sinh viên:
id |
name |
age |
enrollment_date |
|---|---|---|---|
| 1 | Otto Mars | 22 | 2023-01-15 |
| 2 | Anna Song | 19 | 2023-02-10 |
Ở đây id — là mã định danh duy nhất (số), name — text, age — số tuổi, còn enrollment_date — ngày nhập học của sinh viên. Tất cả mấy dữ liệu này đều có kiểu dữ liệu khác nhau vì chúng mô tả các khía cạnh khác nhau của đối tượng.
Phân loại kiểu dữ liệu trong PostgreSQL
PostgreSQL cực kỳ linh hoạt khi làm việc với kiểu dữ liệu. Dưới đây là phân loại ngắn gọn.
Các nhóm kiểu dữ liệu chính:
Kiểu số
- Dùng để lưu số nguyên (ví dụ: số lượng, mã định danh) và số có phần thập phân (ví dụ: tiền).
- Ví dụ:
INTEGER,NUMERIC,FLOAT.
Kiểu text
- Dùng để lưu text và chuỗi (ví dụ: tên, địa chỉ).
- Ví dụ:
CHAR,VARCHAR,TEXT.
Kiểu logic
- Dùng để lưu giá trị logic
TRUE(đúng) hoặcFALSE(sai). - Ví dụ:
BOOLEAN.
- Dùng để lưu giá trị logic
Kiểu cho ngày và giờ
- Dùng để lưu ngày, giờ hoặc kết hợp cả hai.
- Ví dụ:
DATE,TIME,TIMESTAMP.
Kiểu đặc biệt
- Mã định danh duy nhất, object JSON, mảng và nhiều thứ khác nữa.
- Ví dụ:
UUID,JSONB,ARRAY.
Đặc điểm của kiểu dữ liệu trong PostgreSQL
PostgreSQL hỗ trợ cực nhiều kiểu dữ liệu built-in và còn cho phép tạo kiểu dữ liệu custom (tự định nghĩa). Điều này làm cho việc dùng DBMS này cực mạnh cho các hệ thống phức tạp, nơi cần yêu cầu dữ liệu đặc biệt.
Điều thú vị là trong PostgreSQL bạn còn có thể lưu dữ liệu địa lý hoặc chạy query kiểu "Tìm quán cafe trong bán kính 500 mét quanh tôi". Với mấy bài toán như vậy thì cần dùng kiểu dữ liệu đặc biệt.
Khai báo kiểu dữ liệu rõ ràng để làm gì?
Đôi khi bạn sẽ nghĩ, thôi cứ để tất cả các cột trong bảng là text cho tiện — vì text lưu được mọi thứ mà. Nhưng đó là thói quen xấu! Khai báo đúng kiểu dữ liệu sẽ giúp bạn:
Đơn giản hoá query. Nếu PostgreSQL biết cột này chỉ có số, nó sẽ tính toán nhanh hơn, ví dụ như SUM().
Tránh lỗi. Thử tưởng tượng bạn lỡ lưu "ba mươi hai" thay vì 32 vào cột lưu tuổi. Bắt mấy lỗi kiểu này sẽ cực kỳ khó luôn.
GO TO FULL VERSION