Táblák összekapcsolása adatbázisokban Pythonban
Tegyük fel, hogy van egy táblánk a felhasználók neveivel és azoknak a városoknak, amelyekben élnek:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Ennek a táblának az a hátránya, hogy ugyanaz a város többször is megismétlődik különböző felhasználóknál. Ez néhány problémához vezet.
Először is, az állandó ismétlés miatt az adatbázis sokkal több helyet kezd el foglalni.
Másodszor, meglehetősen kényelmetlen a városokkal kapcsolatos műveletek végrehajtása. Például ki szeretnénk írni a képernyőre az összes város listáját. Egyszerűen ezt nem lehet megtenni. El kell kérnünk az összes felhasználót a hozzájuk tartozó városaikkal együtt, majd el kell távolítanunk az ismétlődéseket a kapott városokból, és csak ezután kapjuk meg ezt a listát.
Most képzeljük el, hogy az adatbázisban 10000
felhasználó van 10 városból - ezért a
10 városért ki kell húznunk az egész
táblát a rengeteg sorból -
ez nagyon lassú művelet lesz,
értelmetlen erőforrás-pazarlással.
A probléma megoldása
Fel kell osztanunk a táblánkat kettőre: az egyikben
a városok lesznek tárolva, a másikban pedig a felhasználók.
Eközben a felhasználók táblájában lesz egy
city_id oszlop,
amely a felhasználó városára fog hivatkozni.
Nos, készítsünk két táblát. A városok táblája:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
A felhasználók táblája:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Gyakorlati feladatok
Tegyük fel, hogy árucikkeket (név, ár, mennyiség) és ezen árucikkek kategóriáit kell tárolnia. Írja le a tárolás szerkezetét.
Tegyük fel, hogy folyókat és azokat a tengereket kell tárolnia, amelyekbe ezek a folyók ömlenek. Írja le a tárolás szerkezetét.
Tegyük fel, hogy városokat és az országokat kell tárolnia, amelyekben ezek a városok találhatók. Írja le a tárolás szerkezetét.