Vinculación de tablas en bases de datos
Supongamos que tenemos una tabla con los nombres de usuarios y las ciudades en las que viven:
| id | name | city |
|---|---|---|
| 1 | user1 | city1 |
| 2 | user2 | city1 |
| 3 | user3 | city2 |
| 4 | user4 | city1 |
| 5 | user5 | city3 |
| 6 | user6 | city2 |
La desventaja de esta tabla es que la misma ciudad se repite varias veces para diferentes usuarios. Esto conlleva algunos problemas.
En primer lugar, la repetición constante hace que la base de datos ocupe mucho más espacio.
En segundo lugar, es bastante incómodo realizar operaciones con las ciudades. Por ejemplo, queremos mostrar en pantalla una lista de todas las ciudades. No podremos hacerlo tan fácilmente. Tendremos que obtener todos los usuarios junto con sus ciudades, luego eliminar los duplicados de las ciudades obtenidas y solo entonces obtendremos esta lista.
Y ahora imaginemos que en la base hay 10000
usuarios de 10
ciudades - para obtener estas 10
ciudades tendremos que extraer toda la tabla
con una enorme cantidad de filas - resultará
una operación muy lenta con un desperdicio sin sentido
de recursos.
Solución del problema
Necesitamos dividir nuestra tabla en dos: en una
se almacenarán las ciudades, y en la segunda - los usuarios.
Además, en la tabla de usuarios habrá una columna
city_id, que referenciará
a la ciudad del usuario.
Entonces, hagamos dos tablas. La tabla con ciudades:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
La tabla con usuarios:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Supongamos que necesitas almacenar productos (nombre, precio, cantidad) y las categorías de estos productos. Describe la estructura de almacenamiento.
Supongamos que necesitas almacenar ríos y los mares en los que desembocan estos ríos. Describe la estructura de almacenamiento.
Supongamos que necesitas almacenar ciudades y los países en los que se encuentran. Describe la estructura de almacenamiento.