Collegamento di tabelle nei database in Python
Supponiamo di avere una tabella con i nomi degli utenti e le città in cui vivono:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
Lo svantaggio di questa tabella è che la stessa città si ripete più volte per utenti diversi. Ciò porta ad alcuni problemi.
In primo luogo, la ripetizione continua porta al fatto che il database inizia a occupare molto più spazio.
In secondo luogo, è piuttosto scomodo eseguire operazioni con le città. Ad esempio, vogliamo visualizzare un elenco di tutte le città. Non sarà possibile farlo in modo semplice. Dovremo ottenere tutti gli utenti insieme alle loro città, poi rimuovere i duplicati dalle città ottenute e solo allora otterremo questo elenco.
E ora immaginiamo che nel database ci siano 10000
utenti da 10 città - per queste
10 città dovremo estrarre l'intera
tabella con un enorme numero di righe -
risulterà un'operazione molto lenta con
uno spreco insensato di risorse.
Soluzione al problema
È necessario suddividere la nostra tabella in due: in una
verranno memorizzate le città, e nella seconda - gli utenti.
Allo stesso tempo, nella tabella degli utenti ci sarà una colonna
city_id, che riferirà
alla città dell'utente.
Quindi, creiamo due tabelle. Tabella con le città:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
Tabella con gli utenti:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Compiti pratici
Supponiamo che tu debba memorizzare prodotti (nome, prezzo, quantità) e le categorie di questi prodotti. Descrivi la struttura di memorizzazione.
Supponiamo che tu debba memorizzare fiumi e mari in cui questi fiumi sfociano. Descrivi la struttura di memorizzazione.
Supponiamo che tu debba memorizzare città e paesi in cui si trovano. Descrivi la struttura di memorizzazione.