SQL - Composite Key: A Beginner's Guide

Xin chào các bạn, những phù thủy cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới SQL và khám phá một khái niệm có thể听起来 hơi rợn người ban đầu nhưng thực ra rất đơn giản và vô cùng hữu ích. Chúng ta đang nói về Composite Keys!

SQL - Composite Key

Composite Key là gì?

Trước khi chúng ta nhảy vào sâu, hãy bắt đầu từ những điều cơ bản. Hãy tưởng tượng bạn đang tổ chức một thư viện khổng lồ. Mỗi cuốn sách cần một định danh duy nhất, phải không? Nhưng nếu chỉ có tiêu đề của cuốn sách là không đủ để phân biệt nó thì sao? Đó là lúc người anh hùng của chúng ta, Composite Key, đến để cứu nguy!

Composite Key giống như một siêu anh hùng trong thế giới cơ sở dữ liệu. Nó là sự kết hợp của hai hoặc nhiều cột để cùng nhau xác định duy nhất một hàng trong bảng. Nó giống như nói, "Cuốn sách này duy nhất vì tiêu đề và tác giả và năm xuất bản của nó."

Tại sao sử dụng Composite Keys?

  1. Độc đáo: Chúng đảm bảo mỗi hàng trong bảng của bạn thực sự duy nhất.
  2. Tính toàn vẹn dữ liệu: Chúng giúp duy trì độ chính xác và sự nhất quán của dữ liệu của bạn.
  3. Xây dựng mối quan hệ: Chúng rất tốt cho việc tạo ra các kết nối giữa các bảng.

Bây giờ, hãy gấp áo và bắt đầu viết mã!

Tạo Composite Key

Hãy tạo một bảng cho thư viện tưởng tượng của chúng ta:

CREATE TABLE books (
title VARCHAR(100),
author VARCHAR(50),
publication_year INT,
ISBN VARCHAR(13),
PRIMARY KEY (title, author, publication_year)
);

Trong ví dụ này, chúng ta đã tạo một composite key sử dụng các cột title, author, và publication_year. Điều này có nghĩa là không có hai cuốn sách nào có thể có cùng sự kết hợp của ba thuộc tính này.

Chèn dữ liệu với Composite Keys

Hãy thêm một số cuốn sách vào thư viện của chúng ta:

INSERT INTO books (title, author, publication_year, ISBN)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 1925, '9780743273565'),
('To Kill a Mockingbird', 'Harper Lee', 1960, '9780446310789'),
('1984', 'George Orwell', 1949, '9780451524935');

Những插入将会正常工作,因为每个标题、作者和出版年份的组合都是唯一的。

But what happens if we try to insert a duplicate?

INSERT INTO books (title, author, publication_year, ISBN)
VALUES ('The Great Gatsby', 'F. Scott Fitzgerald', 1925, '1234567890123');

Oops! Điều này sẽ gây ra lỗi vì chúng ta đã có một cuốn sách với tiêu đề, tác giả và năm xuất bản chính xác như vậy. Composite key của chúng ta đang làm công việc của nó!

Truy vấn với Composite Keys

Khi truy vấn một bảng có composite key, bạn thường cần chỉ định tất cả các phần của key:

SELECT * FROM books
WHERE title = 'The Great Gatsby'
AND author = 'F. Scott Fitzgerald'
AND publication_year = 1925;

Truy vấn này sẽ trả về chính xác cuốn sách chúng ta đang tìm kiếm.

Xóa Composite Key

Bây giờ, giả sử chúng ta quyết định rằng composite key của chúng ta không còn phù hợp nữa. Có thể chúng ta đã nhận ra rằng ISBN thực sự là một định danh duy nhất tốt hơn cho các cuốn sách của chúng ta. Hãy xem cách để xóa composite key trong các hệ thống cơ sở dữ liệu khác nhau.

Xóa Composite Key trong MySQL

Trong MySQL, việc xóa composite key rất đơn giản:

ALTER TABLE books
DROP PRIMARY KEY;

Sau khi xóa key, chúng ta có thể thêm một khóa chính mới nếu muốn:

ALTER TABLE books
ADD PRIMARY KEY (ISBN);

Xóa Composite Key trong SQL Server

SQL Server có cách làm tương tự:

ALTER TABLE books
DROP CONSTRAINT PK_books;

Ở đây, PK_books là tên của ràng buộc khóa chính. Nếu bạn không chắc chắn về tên ràng buộc, bạn có thể tìm nó bằng cách sử dụng:

SELECT name
FROM sys.key_constraints
WHERE type = 'PK' AND parent_object_id = OBJECT_ID('books');

Sau đó, giống như trong MySQL, chúng ta có thể thêm một khóa chính mới:

ALTER TABLE books
ADD CONSTRAINT PK_books PRIMARY KEY (ISBN);

Composite Keys so với Keys đơn cột

Bây giờ, bạn có thể tự hỏi, "Tại sao phải phiền phức với composite keys khi tôi có thể chỉ sử dụng một cột?" Câu hỏi tuyệt vời! Hãy phân tích nó:

Mặt khác Composite Keys Single-Column Keys
Độc đáo Đảm bảo tính độc đáo trên nhiều thuộc tính Giới hạn ở tính độc đáo của một thuộc tính
Linh hoạt Linh hoạt hơn trong việc biểu diễn các mối quan hệ phức tạp Đơn giản hơn, nhưng có thể không nắm bắt được tất cả thông tin cần thiết
Hiệu suất truy vấn Có thể chậm hơn cho việc lập chỉ mục và truy vấn Nói chung nhanh hơn cho việc lập chỉ mục và truy vấn
Tính toàn vẹn dữ liệu Có thể强制更复杂的业务规则 Đơn giản hơn để duy trì
Lưu trữ Có thể yêu cầu nhiều không gian lưu trữ hơn Thường yêu cầu ít không gian lưu trữ hơn

Kết luận

Và thế là bạn đã có nó, các bạn! Chúng ta đã cùng nhau hành trình qua vùng đất của Composite Keys, từ tạo ra đến truy vấn đến xóa bỏ. Nhớ rằng, giống như bất kỳ công cụ nào trong bộ công cụ SQL của bạn, composite keys có thời điểm và hely của chúng. Chúng tuyệt vời cho việc đảm bảo tính độc đáo trên nhiều cột và biểu diễn các mối quan hệ phức tạp, nhưng chúng có thể không phải là lựa chọn tốt nhất cho mọi tình huống.

Khi bạn tiếp tục cuộc phiêu lưu với SQL, hãy tiếp tục thử nghiệm với các cấu trúc key khác nhau. Càng thực hành nhiều, bạn sẽ càng thấy nó trở nên tự nhiên. Và biết đâu, một ngày nào đó, bạn có thể tự mình giải thích composite keys cho một nhóm học viên mới đầy sự nhiệt tình!

Đến gặp lại, chúc các bạn viết mã vui vẻ và các truy vấn của bạn luôn trả về kết quả mà bạn mong muốn!

Credits: Image by storyset