Prepojenie tabuliek v databázach v Pythone
Predpokladajme, že máme tabuľku s menami používateľov a mestami, v ktorých žijú:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Nevýhodou tejto tabuľky je, že to isté mesto sa opakuje niekoľkokrát pre rôznych používateľov. To vedie k určitým problémom.
Po prvé, neustále opakovanie vedie k tomu, že databáza začína zaberať oveľa viac miesta.
Po druhé, je dosť nepohodlné vykonávať operácie s mestami. Napríklad, chceme zobraziť na obrazovke zoznam všetkých miest. Tak jednoducho to urobiť nejde. Budeme musieť získať všetkých používateľov spolu s ich mestami, potom odstrániť duplicity z získaných miest a až potom dostaneme tento zoznam.
A teraz si predstavme, že v databáze je 10000
používateľov z 10
miest - pre týchto
10 miest budeme musieť vytiahnuť celú
tabuľku z obrovského množstva riadkov -
dostaneme veľmi pomalú operáciu so
zbytočným plytvaním zdrojov.
Riešenie problému
Je potrebné rozdeliť našu tabuľku na dve: v jednej
budú uložené mestá a v druhej - používatelia.
V tabuľke s používateľmi bude stĺpec
city_id, ktorý bude odkazovať
na mesto používateľa.
Takže, vytvorme dve tabuľky. Tabuľka s mestami:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabuľka s používateľmi:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Praktické úlohy
Predpokladajme, že potrebujete ukladať tovar (názov, cena, množstvo) a kategórie tohto tovaru. Opíšte štruktúru ukladania.
Predpokladajme, že potrebujete ukladať rieky a moria, do ktorých tieto rieky ústia. Opíšte štruktúru ukladania.
Predpokladajme, že potrebujete ukladať mestá a krajiny, v ktorých sa nachádzajú. Opíšte štruktúru ukladania.