Collegamento di tabelle nei database
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 con le 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
cità dovremo estrarre l'intera tabella
con un numero enorme di righe - risulterà
un'operazione molto lenta con uno spreco insensato
di risorse.
Soluzione del problema
È necessario dividere 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 farà riferimento
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 |
Supponiamo di dover memorizzare prodotti (nome, prezzo, quantità) e le categorie di questi prodotti. Descrivete la struttura di memorizzazione.
Supponiamo di dover memorizzare fiumi e mari in cui questi fiumi sfociano. Descrivete la struttura di memorizzazione.
Supponiamo di dover memorizzare città e paesi in cui si trovano. Descrivete la struttura di memorizzazione.