Ở mấy bài đầu, tụi mình đã đặt nền tảng kiến thức về cơ sở dữ liệu quan hệ và PostgreSQL, học cách làm việc với psql và pgAdmin, cũng như biết cách tạo và quản lý database. Giờ là lúc chuyển sang tạo "vật liệu xây dựng" chính của database quan hệ – bảng. Chính bảng là nơi lưu trữ mọi thông tin mà sau này tụi mình có thể lọc, sắp xếp hoặc kết hợp.
Tạo bảng trong PostgreSQL thì dùng lệnh CREATE TABLE. Lệnh này mô tả cấu trúc bảng: tên bảng, các cột và kiểu dữ liệu của từng cột.
Cấu trúc chung của lệnh
Đây là cú pháp cơ bản:
CREATE TABLE bang (
cot1 kieu_du_lieu constraints,
cot2 kieu_du_lieu constraints,
...
);
Phân tích từng phần:
bang– tên bảng (ví dụ,students).cot1– tên cột (ví dụ,id,name).kieu_du_lieu– kiểu dữ liệu của cột (ví dụ,INTEGER,VARCHAR).constraints– ràng buộc cho dữ liệu (ví dụ,NOT NULL,PRIMARY KEY).
Giờ tụi mình sẽ tạo bảng đầu tiên nha.
Ví dụ tạo bảng
Kịch bản: trong database học tập cần lưu thông tin về sinh viên. Vậy nên tạo bảng students với các trường:
id: mã định danh duy nhất của sinh viên (tự động tăng);name: tên sinh viên (chuỗi tối đa 100 ký tự);age: tuổi sinh viên (số nguyên dương).
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- mã ID duy nhất của sinh viên
name VARCHAR(100), -- tên
age INTEGER -- tuổi
);
Ở đây có gì:
id SERIAL PRIMARY KEY: tạo cộtid, tự động sinh số duy nhất (1, 2, 3...) cho mỗi dòng. Nó cũng là khóa chính của bảng.name VARCHAR(100): tạo cột kiểu text,VARCHAR(100)nghĩa là chuỗi tối đa 100 ký tự.age INTEGER: tạo cột số để lưu tuổi.
Bây giờ, nếu chạy lệnh này trong psql hoặc pgAdmin, bảng students sẽ được tạo ra.
Các kiểu dữ liệu cho cột
Khi tạo bảng, chọn đúng kiểu dữ liệu cho từng cột là rất quan trọng. PostgreSQL có nhiều kiểu, nhưng tụi mình bắt đầu với mấy kiểu phổ biến nhất.
| Kiểu dữ liệu | Mô tả | Ví dụ giá trị |
|---|---|---|
INTEGER |
Số nguyên. Hợp cho tuổi, số lượng, mã định danh. | 1, 42, 100 |
VARCHAR(n) |
Chuỗi tối đa n ký tự. Lý tưởng cho text có giới hạn độ dài. |
'Alice', 'Bob' |
TEXT |
Chuỗi không giới hạn. Dùng cho text dài (ví dụ, mô tả sản phẩm). | 'Very long text...' |
DATE |
Ngày không có thời gian. Dùng để lưu ngày sinh, sự kiện. | 2023-10-12 |
BOOLEAN |
Kiểu logic: TRUE hoặc FALSE. Dùng cho flag (ví dụ, đã hoàn thành/chưa). |
TRUE, FALSE |
Chọn kiểu dữ liệu phù hợp
- Nếu lưu số – dùng
INTEGER. - Chuỗi có giới hạn độ dài – nên chọn
VARCHAR(n). - Text không giới hạn – dùng
TEXT. - Ngày và giờ thì lưu bằng
DATEhoặcTIMESTAMP.
Ví dụ: tạo bảng courses
Giả sử trong database cũng cần lưu thông tin về các khóa học. Mỗi khóa học có:
id: mã định danh duy nhất;name: tên khóa học (chuỗi tối đa 100 ký tự);description: mô tả khóa học (text dài);start_date: ngày bắt đầu khóa học.
SQL code:
CREATE TABLE courses (
id SERIAL PRIMARY KEY, -- mã ID duy nhất của khóa học
name VARCHAR(100), -- tên khóa học
description TEXT, -- mô tả
start_date DATE -- ngày bắt đầu
);
Bài tập thực hành
Giờ tới lượt bạn tạo bảng nha! Đây là đề bài:
- Tạo bảng
teachersvới các trường:id: mã định danh duy nhất.name: tên giáo viên (chuỗi tối đa 50 ký tự).subject: môn mà thầy/cô dạy (chuỗi tối đa 50 ký tự).hire_date: ngày nhận việc.
Ví dụ code để làm:
CREATE TABLE teachers (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
subject VARCHAR(50),
hire_date DATE
);
Sau khi chạy xong, dùng lệnh \d teachers trong psql để kiểm tra bảng đã được tạo chưa nha.
Lỗi thường gặp khi tạo bảng
Khi mới làm quen với bảng, dễ gặp lỗi lắm. Đây là vài tình huống phổ biến:
Lỗi tên bảng hoặc cột. Trong PostgreSQL, tên không phân biệt hoa thường, nhưng nếu bạn dùng dấu ngoặc kép " quanh tên, phải cẩn thận. Ví dụ, CREATE TABLE "MyTable" sẽ tạo bảng "MyTable", còn mytable sẽ không nhận ra là tên bảng đó.
Sai kiểu dữ liệu. Nếu bạn ghi kiểu dữ liệu không tồn tại, lệnh sẽ báo lỗi.
CREATE TABLE example (
column1 KIYEU_DU_LIEU_LA
);
Lệnh này sẽ không chạy được vì KIYEU_DU_LIEU_LA không tồn tại.
Quên PRIMARY KEY. Nếu bạn quên thêm khóa chính, bảng vẫn tạo được, nhưng sẽ khó xác định từng dòng.
GO TO FULL VERSION