Chuỗi các bảng liên kết
Bây giờ, giả sử người dùng sống ở các thành phố cụ thể, và những thành phố này nằm ở các quốc gia khác nhau. Trong trường hợp đó, để lưu trữ, chúng ta sẽ cần ba bảng: người dùng sẽ được liên kết với thành phố, và thành phố - với quốc gia. Đồng thời, chúng ta không cần một trường liên kết trực tiếp giữa người dùng và quốc gia - bởi vì người dùng sẽ được liên kết với quốc gia thông qua mối liên kết giữa thành phố và quốc gia.
Hãy xem các bảng của chúng ta. Bảng quốc gia:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Bảng thành phố:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Bảng người dùng sẽ không thay đổi:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Truy vấn
Để lấy thông tin người dùng cùng với thành phố và quốc gia của họ, chúng ta sẽ phải thực hiện hai phép nối (join): phép nối đầu tiên sẽ gắn thành phố vào người dùng, và phép nối thứ hai - gắn quốc gia vào thành phố:
SELECT
users.name,
cities.name as city_name,
countries.name as country_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
LEFT JOIN countries ON countries.id=cities.country_id
Bài tập thực hành
Giả sử sản phẩm thuộc về một danh mục phụ cụ thể, và danh mục phụ thuộc về một danh mục chính cụ thể. Hãy mô tả cấu trúc lưu trữ.
Viết truy vấn để lấy thông tin sản phẩm, cùng với danh mục phụ và danh mục chính của chúng.
Viết truy vấn để lấy thông tin danh mục phụ cùng với danh mục chính của chúng.