Táblák összekapcsolása adatbázisokban
Tegyük fel, hogy van egy táblánk a felhasználók neveivel és azoknak a városoknak, ahol é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 ismé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árrosokkal kapcsolatos műveleteket végrehajtani. Például ki szeretnénk írni a képernyőre az összes város listáját. Ilyen egyszerűen ezt nem lehet megtenni. Ki kell szereznünk az összes felhasználót a városaikkal együtt, majd el kell távolítanunk az ismétlődéseket a kapott városokból és csak akkor kapjuk meg ezt a listát.
Most pedig 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
rengeteg sorból - ez nagyon lassú művelet lesz
értelmetlen erőforrás-pazarlással.
A probléma megoldása
Fel kell bontanunk 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 |
Tegyük fel, hogy árucikkeket (név, ár, mennyiség) és ezeknek az árucikkeknek a kategóriáit kell tárolnia. Írja le a tárolás szerkezetét.
Tegyük fel, hogy folyókat és a tengereket, amelyekbe e folyók ömlenek, kell tárolnia. Írja le a tárolás szerkezetét.
Tegyük fel, hogy városokat és országokat, amelyekben ezek találhatók, kell tárolnia. Írja le a tárolás szerkezetét.