If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Separar datos en tablas relacionadas

Hasta ahora, solo hemos trabajado con una tabla a la vez, y visto qué datos interesantes podemos seleccionar de esa tabla. Pero en realidad, la mayor parte del tiempo, tenemos nuestros datos distribuidos en varias tablas, y todas esas tablas están "relacionadas" unas a otras de alguna manera.
Por ejemplo, digamos que tenemos una tabla para registrar qué tan bien les va a los estudiantes en sus exámenes, e incluimos direcciones de correo electrónico en caso de que necesitemos enviar mensajes a los papás acerca de resbalones en las calificaciones:
nombre_estudiantecorreo_estudianteexamencalificacion
Peter Rabbitpeter@rabbit.comNutrición95
Alice Wonderlandalice@wonderland.comNutrición92
Peter Rabbitpeter@rabbit.comQuímica85
Alice Wonderlandalice@wonderland.comQuímica95
También podríamos tener una tabla para registrar qué libros lee cada estudiante:
nombre_estudiantetitulo_libroautor_libro
Peter RabbitEl cuento de la señora Tiggy-WinkleBeatrix Potter
Peter RabbitJabberwockyLewis Carroll
Alice WonderlandLa Caza del SnarkLewis Carroll
Alice WonderlandJabberwockyLewis Carroll
También podríamos tener una tabla solo para información detallada del estudiante:
idnombre_estudianteapellido_estudiantecorreo_estudiantetelefonocumpleaños
1PeterConejopeter@rabbit.com555-66662001-05-10
2AliceWonderlandalice@wonderland.com555-44442001-04-02
¿Que piensas acerca de estas tablas? ¿Las cambiarías de alguna manera?
Hay una cosa importante que hay que darse cuenta acerca de estas tablas: describen datos relacionales, como en: describen datos que se relacionan unos a otros. Cada una de estas tablas describe datos relacionados a un estudiante en particular, y muchas de las tablas replican los mismos datos. Cuando los mismos datos están replicados en múltples tablas, puede haber consecuencias interesantes.
Por ejemplo, ¿qué pasa si cambia el correo electrónico de un estudiante? ¿Qué tablas serían necesarias cambiar?
Necesitaríamos cambiar la tabla de información del estudiante, pero como también incluimos esos datos en la tabla de calificaciones, también tendríamos que encontrar cada renglón acerca de ese estudiante, y cambiar el correo electrónico ahí también.
A menudo es preferible estar seguros de que una columna de datos en particular esté almacenada en una sola ubicación, de modo que haya menos lugares que actualizar y menos riesgo de tener diferentes datos en diferentes lugares. Si hacemos eso, necesitamos asegurarnos de tener una manera de relacionar los datos en distintas tablas, a lo cual llegaremos más adelante.
Digamos que decidimos quitar el correo electrónico de la tabla de calificaciones, porque nos dimos cuenta de que es redundante con el correo electrónico en la tabla de detalles del estudiante. Esto es lo que tendríamos:
nombre_estudianteexamencalificacion
Peter RabbitNutrición95
Alice WonderlandNutrición92
Peter RabbitQuímica85
Alice WonderlandQuímica95
¿Cómo podríamos averiguar el correo electrónico para cada estudiante? Podríamos encontrar el renglón en la tabla de información de estudiantes, al hacer coincidir los nombres. ¿Qué pasa si 2 estudiantes tienen el mismo nombre? (¿Sabías que en Bali cada persona solo tiene 1 de 4 nombres posibles?) No podemos depender del nombre para buscar un estudiante, y en serio, nunca debemos depender en algo como el nombre para identificar algo de manera única en una tabla.
Así que lo mejor por hacer es quitar nombre_estudiante y reemplazarlo con id_estudiante, ya que ese es un identificador único garantizado:
id_estudianteexamencalificacion
1Nutrición95
2Nutrición92
1Química85
2Química95
Podríamos hacer el mismo cambio en nuestra tabla de libros, al usar id_estudiante en vez de nombre_estudiante:
id_estudiantetitulo_libroautor_libro
1El cuento de la señora Tiggy-WinkleBeatrix Potter
1JabberwockyLewis Carroll
2La Caza del SnarkLewis Carroll
2JabberwockyLewis Carroll
Te das cuenta de que tenemos el título del libro y autor repetidos dos veces para Jabberwocky? Ese es otro signo de alerta de que podríamos separar nuestra tabla en múltiples tablas relacionadas, de modo que no tengamos que actualizar múltiples lugares si algo cambia acerca de un libro.
Podríamos tener una tabla solo acerca de libros:
idtitulo_libroautor_libro
1El cuento de la señora Tiggy-WinkleBeatrix Potter
2JabberwockyLewis Carroll
3La Caza del SnarkLewis Carroll
Y después nuestra tabla libros_estudiantes se convierte en:
id_estudianteid_libro
11
12
23
22
Ya sé, esta tabla no se ve tan legible como la anterior que tenía toda la información metida en cada renglón. Pero las tablas suelen no estar diseñadas para que las lea un humano, sino para que sean lo más fáciles de mantener y menos propensas a errores. En muchos casos, puede ser mejor separar la información en múltiples tablas relacionadas, de modo que haya menos datos redundantes y menos lugares que actualizar.
Es importante entender cómo usar SQL para lidiar con datos que han sido separados en múltiples tablas relacionadas, y traer de regreso los datos de varias tablas cuando sea necesario. Hacemos eso al usar un concepto llamado "join"s (uniones) y eso es lo que te mostraré a continuación.

¿Quieres unirte a la conversación?

¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.