Tạo nhiều bảng trong PostgreSQL - phần 1¶
Tóm lược nội dung
Bài này trình bày cách tạo thêm bảng, đồng thời kết nối hai bảng với nhau, bằng công cụ pgAdmin 4 của PostgreSQL.
Khái quát cơ sở dữ liệu¶
Cơ sở dữ liệu cần tạo là school_db
, dùng để quản lý điểm số của học sinh, gồm một số bảng như sau:
Tên bảng | Dữ liệu được lưu trữ |
---|---|
classrooms |
Dữ liệu về lớp học |
students |
Dữ liệu về học sinh |
subjects |
Dữ liệu về môn học |
scores |
Dữ liệu về điểm số của học sinh |
Bài trước đã hướng dẫn cách tạo một bảng, là students
.
Bài này trình bày cách tạo thêm bảng classrooms
và kết nối với bảng students
.
Mở tập tin sql¶
1. Trong cửa sổ Query Tool của pgAdmin 4, nhấn nút Open File.
2. Chọn tập tin school_db.sql đã lưu trong bài trước.
Bảng classrooms¶
Tạo bảng¶
Mô tả của bảng classrooms
như sau:
Thuộc tính | Ý nghĩa | Kiểu dữ liệu |
---|---|---|
classroom_id |
mã định danh của mỗi lớp | chuỗi gồm 5 ký tự và là khóa chính |
classroom_name |
tên đầy đủ của mỗi lớp | chuỗi gồm 50 ký tự |
room |
phòng học của mỗi lớp | chuỗi gồm 50 ký tự |
head_teacher |
họ tên giáo viên chủ nhiệm | chuỗi gồm 50 ký tự |
Để tạo bảng classrooms
ứng với mô tả trên, ta thực hiện như sau:
1. Trong tab Query, nhập tiếp câu lệnh sau để tạo bảng classrooms
:
2. Quét khối câu lệnh SQL vừa viết, rồi nhấn F5 để chạy. (Hoặc chỉ cần đặt con trỏ vào vị trí bất kỳ trong câu lệnh, rồi nhấn Alt + F5).
Thêm dữ liệu¶
Mã lệnh SQL thêm mới ba mẫu tin (1) vào bảng classrooms
:
- Mỗi mẫu tin là một hàng trong bảng, chứa dữ liệu của một thực thể hoặc một sự kiện, cụ thể ở đây, mỗi mẫu tin là dữ liệu của một lớp.
- Do thêm dữ liệu vào tất cả thuộc tính trong bảng, ta không cần liệt kê tên từng thuộc tính.
Kết nối hai bảng¶
Ta cần kết nối hai bảng students
và classrooms
với nhau nhằm lưu trữ và quản lý thông tin "một học sinh học ở lớp nào" hoặc "một lớp có những học sinh nào". (1)
- Kết nối còn được gọi là tạo mối quan hệ giữa hai bảng.
Để kết nối hai bảng, ta cần thực hiện như sau:
1. Xác định một thuộc tính chung giữa hai bảng. Cụ thể ở đây là thuộc tính classroom_id
.
2. Tạo tham chiếu từ bảng này đến bảng kia. Cụ thể, tạo tham chiếu từ thuộc tính classroom_id
của bảng students
đến thuộc tính classroom_id
của bảng classrooms
.
Hiện nay, bảng students
chưa có thuộc tính classroom_id
. Cho nên, ta cần thêm thuộc tính classroom_id
trước.
Thêm thuộc tính cho bảng¶
Để thêm thuộc tính (cột) cho bảng, ta dùng câu lệnh SQL ALTER TABLE
.
Cú pháp lệnh ALTER TABLE
để thêm thuộc tính (cột)
Ví dụ:
Mã lệnh SQL thêm thuộc tính classroom_id
vào bảng students
:
Kết nối bảng¶
Để kết nối (nói cách khác là tạo mối quan hệ) giữa hai bảng, ta cần dựa vào khoá ngoại (1) và khoá chính của chúng.
- Khóa ngoại là một hoặc nhiều thuộc tính (cột) tham chiếu đến khoá chính của bảng khác, nhằm bảo đảm tính toàn vẹn dữ liệu và duy trì mối quan hệ giữa các bảng.
Theo đó, ta cần tạo ra ràng buộc khoá ngoại cho thuộc tính classroom_id
trong bảng students
. Ràng buộc này bảo đảm rằng giá trị của khoá ngoại classroom_id
trong bảng students
phải tham chiếu đến khoá chính classroom_id
của bảng classrooms
.
Nói cách khác, giá trị classroom_id
của mỗi học sinh trong bảng students
phải khớp với một giá trị classroom_id
có sẵn trong bảng classrooms
.
Chẳng hạn, nếu ta muốn cập nhật classroom_id
của một học sinh thành 10A17
, mà giá trị 10A17
lại không tồn tại trong bảng classrooms
, thì cơ sở dữ liệu sẽ không cho cập nhật. Ràng buộc khoá ngoại ngăn chặn cập nhật là nhằm bảo đảm tính nhất quán của cơ sở dữ liệu.
Để bổ sung ràng buộc khoá ngoại cho một bảng, ta cũng dùng câu lệnh SQL ALTER TABLE
.
Cú pháp lệnh ALTER TABLE
để thêm ràng buộc khoá ngoại
Ví dụ:
Mã lệnh SQL thêm ràng buộc khoá ngoại từ bảng students
đến bảng classrooms
:
-
fk_classroom_id
là tên của ràng buộc.classroom_id
là thuộc tính sẽ làm khoá ngoại của của bảngstudents
. -
Dòng này có nghĩa là: tham chiếu đến
classroom_id
của bảngclassrooms
.
Sau câu lệnh trên, mối quan hệ giữa hai bảng students
và classrooms
được thể hiện qua sơ đồ dưới đây:
Trong đó:
- Bảng
classrooms
được gọi là bảng cha. - Bảng
students
được gọi là bảng con.
Cập nhật giá trị của thuộc tính¶
Để cập nhật giá trị của thuộc tính trong bảng, ta dùng câu lệnh SQL UPDATE
.
Cú pháp lệnh UPDATE
Ví dụ:
Mã lệnh SQL cập nhật giá trị của thuộc tính classroom_id
trong bảng students
:
-
where
: dùng để lọc ra các mẫu tin thoả điều kiện.student_id in ( ... )
: các mẫu tin có giá trịstudent_id
bằng một trong các giá trị trong danh sách sẽ được cập nhật.
Xem toàn bộ dữ liệu của bảng students
vừa cập nhật bằng cách: click phải lên bảng students
> chọn View/Edit Data > chọn All Rows.