Propojování tabulek v databázích
Předpokládejme, že máme tabulku s jmény uživatelů a městy, ve který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 této tabulky je, že stejné město se opakuje několikrát pro různé uživatele. To vede k určitým problémům.
Zaprvé, neustálé opakování vede k tomu, že databáze zabírá mnohem více místa.
Zadruhé, je poměrně nepohodlné provádět operace s městy. Například chceme zobrazit na obrazovce seznam všech měst. Tak jednoduše to udělat nepůjde. Budeme muset získat všechny uživatele i s jejich městy, poté odstranit duplicity z získaných měst a teprve potom získáme tento seznam.
A nyní si představme, že v databázi je 10000
uživatelů z 10
měst - kvůli těchto 10
měst budeme muset načíst celou tabulku
s obrovským množstvím řádků - půjde
o velmi pomalou operaci s nesmyslnou
ztrátou zdrojů.
Řešení problému
Je třeba rozdělit naši tabulku na dvě: v jedné
budou uložena města a ve druhé - uživatelé.
Přičemž v tabulce s uživateli bude sloupec
city_id, který bude odkazovat
na město uživatele.
Takže, udělejme dvě tabulky. Tabulka s městy:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabulka s uživateli:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Předpokládejme, že potřebujete ukládat zboží (název, cena, množství) a kategorie tohoto zboží. Popište strukturu uložení.
Předpokládejme, že potřebujete ukládat řeky a moře, do kterých tyto řeky ústí. Popište strukturu uložení.
Předpokládejme, že potřebujete ukládat města a země, ve kterých se nacházejí. Popište strukturu uložení.