Obtener diferencias entre tablas en mysql
Obtener diferencias entre tablas en mysql

Vamos a ver lo sencillo que puede llegar a ser crear relaciones entre tablas en mysql correctamente y saber obtener los datos de cada una de forma sencilla. En los tutoriales sobre ORMS con laravel y codeigniter pudimos ver todos los tipos de relaciones.

Saber manejar correctamente las relaciones de una base de datos es algo fundamental para un programador, si este trabajo no es llevado a cabo de forma correcta, seguramente cuando la aplicación crezca lo pagaremos con creces, así que no es mala idea invertir un tiempo en aprender todo lo que podamos al respecto.

Entendiendo las relaciones en mysql

Qué mejor que ver todos los casos posibles de relaciones que se nos pueden dar para terminar de entenderlos de forma sencilla.

Relaciones de uno a uno

Estas relaciones existen por ejemplo en el caso de una persona y su dni, una persona sólo puede tener un dni, y un dni sólo puede pertenecer a una persona.

Para llevar a cabo esta relación en nuestra base de datos simplemente debemos crear nuestra tabla usuarios y nuestra tabla dnis, para hacer referencia al dni de cada usuario nos basta con crear un campo en la tabla dnis el cuál actuará como clave foránea haciendo referencia al usuario a través de su id.

Relaciones de uno a muchos

El ejemplo perfecto para estas relaciones es entre usuarios y posts de un blog, un usuario puede tener muchos posts, pero un post sólo puede pertenecer a un usuario, sirve lo mismo que en la relación de uno a uno. La única diferencia entre estas dos relaciones en este aspecto, es que la clave foránea entre usuarios y dnis puede estar tanto en la tabla usuarios con un campo id_dni como en la tabla dnis con un campo id_usuario.

En cambio, en una relación de uno a muchos la clave foránea siempre debe estar en la tabla que hace la relación de muchos, en este caso sería la tabla posts.

Relaciones de muchos a muchos

Este tipo de relaciones vienen a ser las más complicadas, aunque realmente no lo son, para el ejemplo podemos decir que la relación entre usuarios y peliculas(alquileres de un videoclub), un usuario puede alquilar muchas películas, y una película puede ser alquilada por muchos usuarios.

Estas relaciones no pueden ser llevadas a cabo con simples claves foráneas ya que necesitaríamos una por cada registro, cosa completamente inviable. Para este tipo de relaciones debemos crear una tercera tabla, conocida como tabla pívote, que por convención su nombre suele ser usuarios_peliculas para nuestro caso, es decir, los nombres de las dos tablas separados por guiones.

Estas tablas deben contener como mínimo dos campos, usuario_id y pelicula_id que harán referencia a las claves primarias de sus respectivas tablas.

La función de esta tabla es la de poder enlazar a los usuarios y las películas a través de sus claves primarias, es decir, si tenemos un usuario con id 1 y una película con id 120 en sus respectivas tablas, para poder unirlos, deberíamos crear un nuevo registro en la tabla usuarios_peliculas con esos datos.

Para tenerlo más claro, veamos un sencillo diagrama sobre las relaciones de las que hemos hablado y como debemos interpretarlas en nuestra base de datos.

diagrama relacional mysql
Para ver correctamente el diagrama pulsa sobre la imagen.

Normalización

Un proceso interesante en lo que refiere a la normalización viene a ser el evitar la duplicidad de datos en la misma tabla, si por ejemplo tenemos teléfonos fijos en nuestra tabla usuarios, puede ser que éstos sean repetidos por los mismos miembros de un misma familia, para evitarlo, es recomendable crear otra tabla por ejemplo llamada telefonos_fijos que contenga un campo id autoincremental y que sea clave primaria y un campo teléfono que sea UNIQUE.

De esta forma, al registrar nuevos usuarios, en vez de guardar su teléfono en la tabla usuarios, lo que haremos será comprobar si el teléfono existe en la tabla telefonos_fijos, y si no es así, crearemos el registro en esta tabla.

Para relacionar el teléfono al usuario, deberemos crear una clave foránea en la tabla usuarios que haga referencia a su teléfono, así de sencillo.

Consultas mysql para obtener registros

Obtener registros de uno a uno, datos y dni de un usuario.

Obtener registros de uno a muchos, datos de un usuario y sus posts.

Finalmente, para obtener los datos entre una relación de muchos a muchos debemos hacer la siguiente consulta.

Si te ha sido útil el post puedes utilizar los botones de las redes sociales para ayudarme con mi trabajo :D.

Si te ha parecido interesante, no lo dejes aquí

visítanos en cursosdesarrolloweb.es

Tenemos cursos sobre desarrollo web y móvil actualizados donde utilizamos las últimas tecnologías.