FresherKỹ thuậtSQL
Khoá chính và khoá ngoại là gì?
Thử trả lời trước
Đáp án mẫu
Khoá chính (primary key) định danh duy nhất mỗi dòng trong bảng. Nó phải duy nhất, không được NULL và mỗi bảng chỉ có một khoá chính. Nó có thể là giá trị tự nhiên hoặc khoá thay thế như số nguyên tự tăng hay UUID. Phần lớn hệ quản trị tự tạo index cho khoá chính.
Khoá ngoại (foreign key) là một cột (hoặc nhóm cột) tham chiếu đến khoá chính của bảng khác. Nó đảm bảo toàn vẹn tham chiếu: không thể thêm đơn hàng cho khách hàng không tồn tại, và không thể xoá khách hàng còn đơn hàng, trừ khi có quy tắc nói rõ cần làm gì. Các hành động như ON DELETE CASCADE, SET NULL hay RESTRICT quy định hành vi này.
CREATE TABLE customers (
id BIGINT PRIMARY KEY,
email TEXT NOT NULL UNIQUE
);
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
customer_id BIGINT NOT NULL REFERENCES customers (id)
);
Khoá ngoại là thứ làm cho phép join giữa các bảng có ý nghĩa.
Ý chính
- Khoá chính: định danh duy nhất, không NULL của một dòng, mỗi bảng một khoá
- Khoá ngoại: tham chiếu khoá của bảng khác để đảm bảo toàn vẹn tham chiếu
- Các hành động ON DELETE quyết định số phận của các dòng con
- Khoá thay thế như ID rất phổ biến; khoá tự nhiên có thể thay đổi
Câu hỏi nối tiếp thường gặp
- Có nên đánh index cho cột khoá ngoại không?
- Khoá chính phức hợp là gì và khi nào dùng?
Lỗi thường gặp
- Nhầm khoá chính với ràng buộc UNIQUE (một bảng có thể có nhiều ràng buộc unique)
- Bỏ qua khoá ngoại và để lại các dòng mồ côi trong dữ liệu