Vinculación de tablas en bases de datos en Python
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 conduce a algunos problemas.
En primer lugar, la repetición constante conduce a que la base de datos comienza a ocupar mucho más espacio.
En segundo lugar, es bastante inconveniente realizar operaciones con las ciudades. Por ejemplo, queremos mostrar en pantalla la lista de todas las ciudades. Así no será posible hacerlo simplemente. Nos 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 estas
10 ciudades tendremos que obtener 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.
Al mismo tiempo, en la tabla de usuarios habrá una columna
city_id, que referenciará
a la ciudad del usuario.
Entonces, hagamos dos tablas. Tabla con ciudades:
| id | name |
|---|---|
| 1 | city1 |
| 2 | city2 |
| 3 | city3 |
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 |
Tareas prácticas
Supongamos que necesita almacenar productos (nombre, precio, cantidad) y categorías de estos productos. Describa la estructura de almacenamiento.
Supongamos que necesita almacenar ríos y los mares en los que desembocan estos ríos. Describa la estructura de almacenamiento.
Supongamos que necesita almacenar ciudades y los países en los que se encuentran. Describa la estructura de almacenamiento.