Để giúp bạn hiểu rõ hơn về cách sử dụng PRIMARY KEY và FOREIGN KEY, dưới đây là một ví dụ thực tế với các bảng giả định, bao gồm dữ liệu mẫu cho từng bảng. Các bảng sẽ mô phỏng một hệ thống quản lý khách hàng và đơn hàng, trong đó:
- Bảng
customerschứa thông tin về khách hàng. - Bảng
orderschứa thông tin về các đơn hàng của khách hàng, trong đó có sử dụngFOREIGN KEYđể tham chiếu đến bảngcustomers.
1. Bảng customers
Bảng customers sẽ lưu thông tin cơ bản của khách hàng, với customer_id là PRIMARY KEY để xác định duy nhất mỗi khách hàng.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
phone VARCHAR(20),
address VARCHAR(255)
);Dữ liệu giả định cho bảng customers:
| customer_id | customer_name | phone | address | |
|---|---|---|---|---|
| 1 | John Doe | john@example.com | 123-456-7890 | 123 Elm Street |
| 2 | Jane Smith | jane@example.com | 987-654-3210 | 456 Oak Street |
| 3 | Alice Johnson | alice@example.com | 555-123-4567 | 789 Pine Street |
| 4 | Bob Brown | bob@example.com | 444-555-6666 | 101 Maple Avenue |
2. Bảng orders
Bảng orders lưu trữ thông tin về các đơn hàng. Trong đó, customer_id là FOREIGN KEY tham chiếu đến cột customer_id của bảng customers để đảm bảo rằng mỗi đơn hàng phải thuộc về một khách hàng hợp lệ.
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE NOT NULL,
customer_id INT,
amount DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
ON DELETE CASCADE
);Dữ liệu giả định cho bảng orders:
| order_id | order_date | customer_id | amount |
|---|---|---|---|
| 101 | 2023-09-01 | 1 | 150.75 |
| 102 | 2023-09-05 | 2 | 200.00 |
| 103 | 2023-09-10 | 1 | 99.99 |
| 104 | 2023-09-15 | 3 | 250.50 |
3. Mối quan hệ giữa hai bảng
- Bảng
customerschứa danh sách khách hàng vớicustomer_idlà khóa chính (PRIMARY KEY). - Bảng
orderscócustomer_idlà khóa ngoại (FOREIGN KEY) tham chiếu đếncustomer_idtrong bảngcustomers. Điều này đảm bảo rằng tất cả các đơn hàng phải thuộc về khách hàng đã tồn tại trong bảngcustomers.
Ví dụ về câu truy vấn kết hợp dữ liệu từ cả hai bảng:
SELECT o.order_id, o.order_date, o.amount, c.customer_name, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;Kết quả của truy vấn:
| order_id | order_date | amount | customer_name | |
|---|---|---|---|---|
| 101 | 2023-09-01 | 150.75 | John Doe | john@example.com |
| 102 | 2023-09-05 | 200.00 | Jane Smith | jane@example.com |
| 103 | 2023-09-10 | 99.99 | John Doe | john@example.com |
| 104 | 2023-09-15 | 250.50 | Alice Johnson | alice@example.com |
4. Xóa bản ghi với ON DELETE CASCADE
Với ràng buộc ON DELETE CASCADE trong bảng orders, nếu một bản ghi trong bảng customers bị xóa, tất cả các đơn hàng tương ứng trong bảng orders sẽ tự động bị xóa.
Ví dụ, nếu bạn xóa khách hàng có customer_id = 1 (John Doe):
DELETE FROM customers WHERE customer_id = 1;Sau khi thực thi câu lệnh này, tất cả các đơn hàng của John Doe trong bảng orders sẽ bị xóa. Dữ liệu trong bảng orders sẽ còn lại như sau:
| order_id | order_date | customer_id | amount |
|---|---|---|---|
| 102 | 2023-09-05 | 2 | 200.00 |
| 104 | 2023-09-15 | 3 | 250.50 |
5. Tóm tắt
- Bảng
customerschứa thông tin khách hàng, trong đócustomer_idlà khóa chính. - Bảng
orderslưu trữ các đơn hàng và cócustomer_idlà khóa ngoại tham chiếu đến bảngcustomers. - Ràng buộc
FOREIGN KEYvớiON DELETE CASCADEđảm bảo rằng khi khách hàng bị xóa, tất cả các đơn hàng liên quan cũng bị xóa theo.
Hệ thống này đảm bảo dữ liệu giữa các bảng có sự liên kết chặt chẽ, và các ràng buộc PRIMARY KEY và FOREIGN KEY đảm bảo tính toàn vẹn và chính xác của dữ liệu trong hệ thống quản lý khách hàng và đơn hàng.









