Xây dựng cơ sở dữ liệu trong PostgreSQL - Phần 3¶
Tóm lược nội dung
Bài này trình bày:
- Cách tạo thêm bảng
- Cách thêm thuộc tính cho bảng
- Cách cập nhật dữ liệu
- Cách liên kết hai bảng
Khái quát¶
Cơ sở dữ liệu cần xây dựng là school_db, dùng để quản lý điểm số của học sinh.
school_db gồm có các bảng sau:
| Tên bảng | Nội dung của dữ liệu |
|---|---|
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 này đề cập cách tạo thêm bảng classrooms và liên kết với bảng students.
Tạo thêm bảng¶
Ta có thể tạo thêm nhiều bảng cho cùng một cơ sở dữ liệu.
Ví dụ:
Bảng classrooms cần tạo lược đồ như sau:
classrooms(classroom_id, classroom_name, room, head_teacher)
Bảng dưới đây mô tả các thuộc tính (cột) của classrooms:
| Thuộc tính | Ý nghĩa | Kiểu dữ liệu |
|---|---|---|
classroom_id |
mã định danh của mỗi lớp và là khóa chính | char(5): chuỗi gồm 5 ký tự |
classroom_name |
tên đầy đủ của mỗi lớp | varchar(50): chuỗi gồm 50 ký tự |
room |
phòng học của mỗi lớp | varchar(50): chuỗi gồm 50 ký tự |
head_teacher |
họ tên giáo viên chủ nhiệm | varchar(50): chuỗi gồm 50 ký tự |
Các bước thực hiện:
1. Viết câu lệnh SQL để tạo bảng classrooms.
2. Quét khối câu lệnh vừa viết, nhấn F5 để chạy.
3. Refresh lại school_db để kiểm tra đã có bảng chưa.
Thêm mẫu tin vô bảng¶
1. Viết câu lệnh SQL để thêm ba mẫu tin mới vô bảng classrooms.
- Do thêm dữ liệu vô 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.
2. Quét khối câu lệnh vừa viết, nhấn F5 để chạy.
3. Chọn menu View/Edit Data để xem dữ liệu của bảng.
Thêm thuộc tính cho bảng¶
Ví dụ:
Trước khi liên kết hai bảng students và classrooms với nhau, ta cần tạo thêm thuộc tính classroom_id cho bảng students. Các bước thực hiện:
1. Viết câu lệnh SQL để thêm thuộc tính classroom_id cho bảng students.
2. Quét khối câu lệnh vừa viết, nhấn F5 để chạy.
3. Refresh lại bảng students để kiểm tra đã có thuộc tính mới chưa.
Lúc này, lược đồ của bảng students đã trở thành:
students(student_id, last_name, first_name, gender, birth_date, birth_place, classroom_id)
Về việc thêm thuộc tính
Việc tạo thêm thuộc tính cho bảng như trên chỉ nhằm minh hoạ câu lệnh ALTER TABLE.
Trong thực tế, cơ sở dữ liệu nên được thiết kế kỹ lưỡng ngay từ đầu. Việc thay đổi cấu trúc bảng (chẳng hạn như thêm thuộc tính) khi hệ thống đã đi vào hoạt động và có lượng dữ liệu lớn thường phức tạp, dễ phát sinh lỗi.
Liên kết hai bảng¶
Ta cần liên kết hai bảng students và classrooms với nhau. Liên kết còn được gọi là tạo mối quan hệ giữa hai bảng.
Mối quan hệ này giúp ta biết được: một học sinh thuộc về lớp nào, hoặc một lớp có những học sinh nào. Đồng thời, cũng giúp bảo đảm tính toàn vẹn của dữ liệu.
Các bước liên kết hai bảng
Bước 1: Xác định một thuộc tính chung giữa hai bảng.
Thuộc tính chung còn được gọi là khóa chính đối với bảng cha và khóa ngoại đối với bảng con.
Bước 2: Tạo tham chiếu từ bảng này đến bảng kia.
Ví dụ:
Hai bước để liên kết bảng students và bảng classrooms:
-
Bước 1: thuộc tính chung của hai bảng
studentsvàclassroomslàclassroom_id. Trong đó:classroomslà bảng cha.classroom_idcủaclassroomslà khóa chính.studentslà bảng con.classroom_idcủastudentslà khóa ngoại.
-
Bước 2: tạo tham chiếu từ thuộc tính
classroom_idcủa bảngstudents(khóa ngoại) đến thuộc tínhclassroom_idcủa bảngclassrooms(khóa chính).
Trong SQL, việc liên kết hai bảng được thực hiện bằng cách thiết lập một ràng buộc khóa ngoại. Ràng buộc này bắt buộc giá trị tại classroom_id của students phải tham chiếu chính xác đến khóa chính classroom_id của classrooms.
Nói cách khác, mọi mã lớp được nhập cho học sinh trong bảng students bắt buộc phải tồn tại sẵn trong classroom_id của bảng classrooms. Việc xếp học sinh vô một lớp không có thực sẽ làm cho cơ sở dữ liệu mất tính toàn vẹn.
Ví dụ:
Nếu ta chỉnh sửa classroom_id của một học sinh thành 11A17, mà giá trị 11A17 lại không tồn tại trong bảng classrooms, thì cơ sở dữ liệu sẽ không còn đúng đắn, mất tính toàn vẹn.
Ràng buộc khóa ngoại là nhằm giúp ngăn chặn những tình huống này xảy ra.
Cú pháp SQL tạo ràng buộc khóa ngoại
Ví dụ:
1. Viết câu lệnh SQL để tạo ràng buộc khóa ngoại từ bảng students tham chiếu đến bảng classrooms:
-
fk_classroom_idlà tên của ràng buộc.classroom_idlà thuộc tính sẽ làm khóa ngoại của bảngstudents. -
Dòng này có nghĩa là: tham chiếu đến
classroom_idcủa bảngclassrooms.
2. Quét khối câu lệnh vừa viết, nhấn F5 để chạy.
Sau khi chạy 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. Mối quan hệ này được gọi là 1-nhiều.
Cập nhật dữ liệu¶
Lúc này, trong bảng students, dữ liệu của thuộc tính classroom_id đang rỗng. Ta cần chỉnh sửa lại bằng cách nhập mã lớp cụ thể.
Thao tác chỉnh sửa được gọi là cập nhật dữ liệu.
Cú pháp SQL cập nhật dữ liệu
Ví dụ:
1. Viết câu lệnh SQL để cập nhật thuộc tính classroom_id cho học sinh có mã 221001.
-
Đặt giá trị cho
classroom_idthành12CTo. -
Chỉ áp dụng cho học sinh nào có
student_idlà221001.
Về điều kiện trong WHERE
Trước khi thực thi câu lệnh, ta phải kiểm tra kỹ điều kiện sau từ khóa WHERE, vì chỉ một sai sót nhỏ cũng có thể làm thay đổi dữ liệu của tất cả các mẫu tin trong bảng.
2. Viết câu lệnh SQL để cập nhật thuộc tính classroom_id cho hai học sinh có mã 231001 và 241021.
3. Quét khối cả ba câu lệnh vừa viết, nhấn F5 để chạy.
4. Chọn menu View/Edit Data để xem dữ liệu của bảng. Kết quả như hình dưới đây.
Mã nguồn¶
Code đầy đủ được đặt tại:

