Liên kết các bảng trong cơ sở dữ liệu
Giả sử chúng ta có một bảng với tên người dùng và các thành phố mà họ sống:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Nhược điểm của bảng này là một thành phố lặp lại nhiều lần cho các người dùng khác nhau. Điều này dẫn đến một số vấn đề.
Thứ nhất, việc lặp lại liên tục dẫn đến việc cơ sở dữ liệu bắt đầu chiếm nhiều không gian hơn.
Thứ hai, khá bất tiện khi thực hiện các thao tác với các thành phố. Ví dụ, chúng ta muốn hiển thị danh sách tất cả các thành phố. Không thể làm điều này một cách đơn giản. Chúng ta sẽ phải lấy tất cả người dùng cùng với các thành phố của họ, sau đó loại bỏ các bản trùng lặp từ các thành phố đã lấy và chỉ khi đó chúng ta mới nhận được danh sách này.
Và bây giờ hãy tưởng tượng rằng trong cơ sở dữ liệu có 10000
người dùng từ 10 thành phố - chỉ để lấy 10
thành phố này chúng ta sẽ phải lấy toàn bộ bảng
với số lượng hàng khổng lồ - điều này sẽ dẫn đến
một thao tác rất chậm với việc lãng phí tài nguyên vô nghĩa.
Giải pháp cho vấn đề
Cần chia bảng của chúng ta thành hai: một bảng
sẽ lưu trữ các thành phố, và bảng kia - người dùng.
Đồng thời, trong bảng người dùng sẽ có cột
city_id, cột này sẽ tham chiếu
đến thành phố của người dùng.
Vậy, hãy tạo hai bảng. Bảng với các thành phố:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Bảng với người dùng:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Giả sử bạn cần lưu trữ các sản phẩm (tên, giá, số lượng) và danh mục của những sản phẩm này. Hãy mô tả cấu trúc lưu trữ.
Giả sử bạn cần lưu trữ các con sông và biển, nơi các con sông này đổ vào. Hãy mô tả cấu trúc lưu trữ.
Giả sử bạn cần lưu trữ các thành phố và quốc gia, nơi chúng tọa lạc. Hãy mô tả cấu trúc lưu trữ.