Łączenie tabel w bazach danych w Pythonie
Załóżmy, że mamy tabelę z nazwami użytkowników i miastami, w których mieszkają:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Wadą tej tabeli jest to, że to samo miasto powtarza się kilka razy dla różnych użytkowników. Prowadzi to do pewnych problemów.
Po pierwsze, ciągłe powtarzanie prowadzi do tego, że baza danych zajmuje znacznie więcej miejsca.
Po drugie, dość niewygodne jest wykonywanie operacji na miastach. Na przykład, chcemy wyświetlić na ekranie listę wszystkich miast. Nie da się tego zrobić tak po prostu. Będziemy musieli pobrać wszystkich użytkowników razem z ich miastami, następnie usunąć duplikaty z otrzymanych miast i dopiero wtedy otrzymamy tę listę.
A teraz wyobraźmy sobie, że w bazie jest 10000
użytkowników z 10
miast - dla tych
10 miast będziemy musieli pobrać całą
tabelę z ogromną liczbą wierszy -
będzie to bardzo wolna operacja z
bezsensownym marnowaniem zasobów.
Rozwiązanie problemu
Należy podzielić naszą tabelę na dwie: w jednej
będą przechowywane miasta, a w drugiej - użytkownicy.
Jednocześnie w tabeli z użytkownikami będzie kolumna
city_id, która będzie odwoływać się
do miasta użytkownika.
A więc, stwórzmy dwie tabele. Tabela z miastami:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabela z użytkownikami:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Zadania praktyczne
Załóżmy, że musisz przechowywać produkty (nazwa, cena, ilość) i kategorie tych produktów. Opisz strukturę przechowywania.
Załóżmy, że musisz przechowywać rzeki i morza, do których te rzeki uchodzą. Opisz strukturę przechowywania.
Załóżmy, że musisz przechowywać miasta i kraje, w których się znajdują. Opisz strukturę przechowywania.