Liên kết bảng trong cơ sở dữ liệu bằng Python
Giả sử chúng ta có một bảng chứa tên người dùng và các thành phố 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 chiếm dụng nhiều không gian hơn đáng kể.
Thứ hai, việc thực hiện các thao tác với các thành phố khá bất tiện. Ví dụ, chúng ta muốn hiển thị danh sách tất cả các thành phố. Sẽ không thể thực hiện đ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 sao ché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 truy xuất toàn bộ
bảng với số lượng hàng khổng lồ -
điều này sẽ trở thành 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 |
Bài tập thực hành
Giả sử bạn cần lưu trữ sản phẩm (tên, giá, số lượng) và danh mục của các 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 mà 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 mà chúng thuộc về. Hãy mô tả cấu trúc lưu trữ.