Ràng Buộc
Ràng Buộc - Tổng Quan
- Khái niệm: Ràng buộc là các quy tắc áp dụng lên các trường trong bảng, dùng để giới hạn dữ liệu được lưu trữ.
- Mục đích: Đảm bảo tính chính xác, hiệu quả và toàn vẹn của dữ liệu trong cơ sở dữ liệu.
- Phân loại:
Lưu ý: Ràng buộc được áp dụng lên các trường trong bảng, có thể được thêm khi tạo bảng hoặc sửa bảng.
Ví dụ:
create table nguoi_dung(
id int khoa_chinh tu_tang_bang comment 'Khóa chính',
ten varchar(10) not null unique comment 'Tên',
tuoi int check ( tuoi > 0 && tuoi <= 120 ) comment 'Tuổi',
trang_thai char(1) default '1' comment 'Trạng thái',
gioi_tinh char(1) comment 'Giới tính'
) comment 'Bảng người dùng';
insert into nguoi_dung(ten, tuoi, trang_thai, gioi_tinh) values ('An1', 19, '1', 'Nam'), ('An2', 25, '0', 'Nam');
insert into nguoi_dung(ten, tuoi, trang_thai, gioi_tinh) values ('An3' , 19, '1', 'Nam');
insert into nguoi_dung(ten, tuoi, trang_thai, gioi_tinh) values (null , 19, '1', 'Nam');
insert into nguoi_dung(ten, tuoi, trang_thai, gioi_tinh) values ('An3', 19, '1', 'Nam');
insert into nguoi_dung(ten, tuoi, trang_thai, gioi_tinh) values ('An4', 80, '1', 'Nam');
insert into nguoi_dung(ten, tuoi, trang_thai, gioi_tinh) values ('An5', -1, '1', 'Nam');
insert into nguoi_dung(ten, tuoi, trang_thai, gioi_tinh) values ('An5', 121, '1', 'Nam');
insert into nguoi_dung(ten, tuoi, gioi_tinh) values ('An6', 120, 'Nam');
Ràng Buộc - Ràng Buộc Khóa Ngoại
- Khái niệm: Khóa ngoại được sử dụng để thiết lập kết nối giữa dữ liệu của hai bảng, từ đó đảm bảo tính nhất quán và toàn vẹn của dữ liệu.
Lưu ý: Hiện tại, hai bảng trên chưa được thiết lập mối quan hệ khóa ngoại ở cấp độ cơ sở dữ liệu, do đó không thể đảm bảo tính nhất quán và toàn vẹn của dữ liệu.
- Cú pháp
· Thêm khóa ngoại
CREATE TABLE ten_bang (
ten_truong kieu_dulieu,
...
[CONSTRANT] [ten_khoa_ngoai] FOREIGN KEY (ten_truong_khoa_ngoai) REFERENCES bang_cha (ten_cot_cha)
);
ALTER TABLE ten_bang ADD CONSTRANT ten_khoa_ngoai FOREIGN KEY (ten_truong_khoa_ngoai) REFERENCES bang_cha (ten_cot_cha);
· Xóa khóa ngoại
ALTER TABLE ten_bang DROP FOREIGN KEY ten_khoa_ngoai;
- Hành vi Xóa/Cập nhật
ALTER TABLE ten_bang ADD CONSTRANT ten_khoa_ngoai FOREIGN KEY (ten_truong_khoa_ngoai) REFERENCES bang_cha (ten_cot_cha) ON UPDATE CASCADE ON DELETE CASCADE;
Truy Vấn Đa Bảng
Truy Vấn Đa Bảng - Giới Thiệu Quan Hệ Đa Bảng
- Tổng quan: Trong quá trình phát triển dự án, khi thiết kế cấu trúc bảng cơ sở dữ liệu, người ta sẽ phân tích và thiết kế cấu trúc bảng dựa trên yêu cầu kinh doanh và mối quan hệ giữa các module. Do các module kinh doanh có liên quan với nhau, nên các cấu trúc bảng cũng tồn tại nhiều loại mối quan hệ, chủ yếu chia thành ba loại: một-nhiều (nhiều-một), nhiều-nhiều, một-một.
- Một-nhiều (nhiều-một)
· Ví dụ: Quan hệ giữa phòng ban và nhân viên
· Quan hệ: Một phòng ban có nhiều nhân viên, một nhân viên thuộc về một phòng ban
· Cách thực hiện: Tạo khóa ngoại ở phía nhiều, trỏ đến khóa chính của phía một
- Nhiều-nhiều
· Ví dụ: Quan hệ giữa sinh viên và môn học
· Quan hệ: Một sinh viên có thể đăng ký nhiều môn học, một môn học cũng có thể được nhiều sinh viên đăng ký
· Cách thực hiện: Tạo bảng trung gian, bảng trung gian ít nhất chứa hai khóa ngoại, lần lượt trỏ đến khóa chính của hai bảng
- Một-một
· Ví dụ: Quan hệ giữa người dùng và thông tin chi tiết người dùng
· Quan hệ: Quan hệ một-một, thường được sử dụng để chia một bảng, các trường cơ bản được đặt trong một bảng, các trường chi tiết khác được đặt trong bảng khác, nhằm tăng hiệu quả thao tác
· Cách thực hiện: Thêm khóa ngoại ở bất kỳ phía nào, liên kết đến khóa chính của phía còn lại, và đặt khóa ngoại là duy nhất (UNIQUE)
Truy Vấn Đa Bảng - Tổng Quan
- Tổng quan: Là việc truy vấn dữ liệu từ nhiều bảng cùng lúc
- Tích Descartes: Trong toán học, tích Descartes là tất cả các tổ hợp có thể có của hai tập hợp A và B. (Khi truy vấn đa bảng, cần loại bỏ các tích Descartes không hợp lệ)
- Phân loại truy vấn đa bảng
· Truy vấn nối
Nối trong: Tương đương với việc truy vấn dữ liệu phần giao của hai bảng A và B
Nối ngoài:
Nối trái: Truy vấn tất cả dữ liệu của bảng trái, cùng với dữ liệu phần giao của hai bảng
Nối phải: Truy vấn tất cả dữ liệu của bảng phải, cùng với dữ liệu phần giao của hai bảng
Tự nối: Truy vấn nối một bảng với chính nó, nối tự phải sử dụng bí danh bảng.
· Truy vấn con
Truy Vấn Đa Bảng - Nối Trong
- Nối trong ngầm định
SELECT danh_sach_truong FROM bang1, bang2 WHERE dieu_kien ... ;
- Nối trong tường minh
SELECT danh_sach_truong FROM bang1 [INNER] JOIN bang2 ON dieu_kien_noi ... ;
Truy Vấn Đa Bảng - Nối Ngoài
- Nối trái
SELECT danh_sach_truong FROM bang1 LEFT [OUTER] JOIN bang2 ON dieu_kien ... ;
Tương đương với việc truy vấn tất cả dữ liệu của bảng1 (bảng trái), bao gồm cả dữ liệu phần giao của bảng1 và bảng2
- Nối phải
SELECT danh_sach_truong FROM bang1 RIGHT [OUTER] JOIN bang2 ON dieu_kien ... ;
Tương đương với việc truy vấn tất cả dữ liệu của bảng2 (bảng phải), bao gồm cả dữ liệu phần giao của bảng1 và bảng2
Truy Vấn Đa Bảng - Tự Nối
SELECT danh_sach_truong FROM bang_A ten_bang_A JOIN bang_A ten_bang_B ON dieu_kien ... ;
Truy vấn tự nối, có thể là nối trong hoặc nối ngoài.
Truy Vấn Đa Bảng - Nối Hợp
Đối với truy vấn union, nó kết hợp kết quả của nhiều lần truy vấn, tạo thành một tập kết quả truy vấn mới.
SELECT danh_sach_truong FROM bang_A ...
UNION [ALL]
SELECT danh_sach_truong FROM bang_B ... ;
Đối với truy vấn hợp của nhiều bảng, số lượng cột phải giữ nguyên, kiểu dữ liệu cũng phải tương thích.
union all sẽ hợp tất cả dữ liệu trực tiếp, union sẽ loại bỏ các bản trùng sau khi hợp.