SQL - Khóa Phụ
Chào mừng các bạn, những pháp sư tương lai! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới kỳ diệu của SQL và khám phá một khái niệm thường bị bỏ qua nhưng vô cùng quan trọng: Khóa Phụ (Alternate Key). Hãy cầm lấy những cây phép ảo của bạn (hoặc bàn phím), và cùng nhau bắt đầu hành trình kỳ diệu này nhé!
Khóa Phụ trong SQL
Khóa Phụ là gì?
Khóa Phụ, còn được gọi là Khóa Ứng cử (Candidate Key), là một cột hoặc một tập hợp các cột trong bảng cơ sở dữ liệu có thể phục vụ như khóa chính. Nó giống như việc có một siêu nhân dự bị sẵn sàng cứu nguy nếu siêu nhân chính (khóa chính) không có mặt.
Hãy cùng phân tích với một ví dụ thú vị. Hãy tưởng tượng bạn đang điều hành một trường pháp sư (vì sao không?), và bạn có một bảng sinh viên:
CREATE TABLE wizards (
wizard_id INT PRIMARY KEY,
wand_serial_number VARCHAR(20) UNIQUE,
email_address VARCHAR(50) UNIQUE,
wizard_name VARCHAR(100),
house VARCHAR(20)
);
Trong bảng này, wizard_id
là khóa chính. Nhưng hãy nhìn kỹ wand_serial_number
và email_address
. Chúng cũng có thể xác định duy nhất mỗi pháp sư, làm chúng trở thành những ứng cử viên hoàn hảo cho khóa phụ!
Đặc điểm của Khóa Phụ
- Độc đáo: Giống như số serial của cây phép, khóa phụ phải duy nhất cho mỗi bản ghi.
- Không Null: Chúng không thể chứa giá trị null. Mỗi pháp sư cần một cây phép và một email!
- Tối thiểu: Chúng nên sử dụng số lượng cột tối thiểu cần thiết để đảm bảo tính duy nhất.
Các Khóa trong Bảng
Bây giờ chúng ta đã giới thiệu xong cầu thủ ngôi sao của mình, hãy gặp toàn đội các khóa bạn có thể gặp trong một bảng SQL.
Loại Khóa
Loại Khóa | Mô tả | Ví dụ trong Bảng Pháp Sư |
---|---|---|
Khóa Chính | Mã định danh duy nhất cho mỗi bản ghi | wizard_id |
Khóa Phụ | Ứng cử viên cho khóa chính, duy nhất nhưng không được chọn |
wand_serial_number , email_address
|
Khóa Ngoại | Tham chiếu đến khóa chính trong bảng khác |
house_id (nếu chúng ta có bảng Houses riêng) |
Khóa Hợp | Nhiều cột kết hợp để tạo thành một định danh duy nhất | (wizard_name, date_of_birth) |
Khóa Siêu | Bất kỳ tập hợp các cột nào có thể xác định duy nhất một bản ghi | (wizard_id, wand_serial_number) |
Tại sao Khóa Phụ lại Quan trọng?
- Tính linh hoạt: Chúng cung cấp các cách thay thế để xác định bản ghi.
- Tính toàn vẹn dữ liệu: Chúng giúp duy trì tính duy nhất của dữ liệu.
- Tối ưu hóa truy vấn: Chúng có thể được sử dụng để tạo các chỉ mục hiệu quả.
Hãy xem cách chúng ta có thể sử dụng khóa phụ trong một truy vấn:
SELECT wizard_name, house
FROM wizards
WHERE wand_serial_number = 'OL-123456';
Ở đây, chúng ta sử dụng wand_serial_number
(một khóa phụ) để tìm một pháp sư cụ thể. Nó hiệu quả như việc sử dụng khóa chính, và trong một số trường hợp, nó có thể tiện lợi hơn!
Thực hiện Khóa Phụ
Bây giờ, hãy c rolled up our sleeves và xem cách chúng ta có thể thực hiện khóa phụ trong cơ sở dữ liệu pháp sư của mình.
Sử dụng Ràng buộc UNIQUE
Cách đơn giản nhất để tạo khóa phụ là sử dụng ràng buộc UNIQUE:
CREATE TABLE wizards (
wizard_id INT PRIMARY KEY,
wand_serial_number VARCHAR(20) UNIQUE,
email_address VARCHAR(50) UNIQUE,
wizard_name VARCHAR(100),
house VARCHAR(20)
);
Trong ví dụ này, cả wand_serial_number
và email_address
đều được đặt là UNIQUE, làm chúng trở thành khóa phụ.
Sử dụng UNIQUE INDEX
Một cách khác để tạo khóa phụ là sử dụng UNIQUE INDEX:
CREATE TABLE wizards (
wizard_id INT PRIMARY KEY,
wand_serial_number VARCHAR(20),
email_address VARCHAR(50),
wizard_name VARCHAR(100),
house VARCHAR(20)
);
CREATE UNIQUE INDEX idx_wand_serial ON wizards(wand_serial_number);
CREATE UNIQUE INDEX idx_email ON wizards(email_address);
Phương pháp này đặc biệt hữu ích khi bạn muốn thêm khóa phụ vào một bảng đã tồn tại.
Các Quy tắc Tốt nhất khi Sử dụng Khóa Phụ
-
Chọn Kỹ Lưỡng: Không phải mỗi cột duy nhất cần phải là khóa phụ. Chọn những cột có logic hợp lý cho dữ liệu của bạn.
-
Xem Xét Hiệu Suất: Mặc dù khóa phụ rất hữu ích, nhưng quá nhiều khóa phụ có thể làm chậm các thao tác chèn và cập nhật.
-
Duy trì Tính Đồng nhất: Nếu bạn sử dụng khóa phụ跨越 nhiều bảng (như
wand_serial_number
), đảm bảo nó được định dạng và xác minh một cách nhất quán. -
Lưu Trữ Lựa Chọn của Bạn: Luôn lưu trữ lý do bạn chọn các khóa phụ. Bản thân bạn (và đồng nghiệp) sẽ cảm ơn bạn sau này!
Kết Luận
Và thế là bạn đã có nó, các pháp sư trẻ! Chúng ta đã khám phá thế giới kỳ diệu của Khóa Phụ trong SQL. Nhớ rằng, trong khi Khóa Chính có thể là người được chọn, Khóa Phụ là những người hùng không được công nhận, sẵn sàng bước vào khi cần thiết.
Khi bạn tiếp tục hành trình trong thế giới cơ sở dữ liệu, hãy để ý đến những khóa phụ này. Chúng có thể chính là phép thuật bạn cần để mở khóa những thiết kế cơ sở dữ liệu mạnh mẽ và hiệu quả!
Bây giờ, hãy tiến lên và chúc may mắn cho bạn, những truy vấn của bạn sẽ luôn được tối ưu hóa và tính toàn vẹn dữ liệu của bạn sẽ không bị xâm phạm!
Credits: Image by storyset