(Hace ya mucho tiempo) Construyendo redes y abriendo la Educación

Hace ya algunos años hablando de cómo construimos redes para abrir la educación de adultos. Me mandaron a mí pero yo sólo era un pieza más de un gran equipo.

Y lo plasmamos en un artículo de OpenEducation para la UE:
http://blogs.ec.europa.eu/openeducation2030/files/2013/04/Castillo-OE2030-LLL.pdf

Diferentes Tipos de Join en el Modelo Relacional (MySQL)

La operación JOIN (combinación) es una operación fundamental en el modelo de base de datos relacional. Si no entiendes cómo funcional realmente y cuáles van a ser los resultados es difícil que trabajes bien con ese tipo de base de datos. Una definición sencilla sería que es “la combinación de dos tablas para extraer la información relacionada de las mismas”.

El problema es que hay diferentes tipos de joins y todos tienen diferente significado. Para clarificar el asunto vamos a ver un ejemplo de los más usado centrándonos en MySQL. En otros gestores de bases de datos (DBMS) el funcionamiento será similar aunque habrá que asegurarse leyendo la documentación.

Los vamos a explicar tomando como referencia el siguiente modelo:

Model Relacional - Relación 1:N

Model Relacional – Relación 1:N

La anterior imagen representa una relación 1:N entre clientes y vehículos. Cada uno de los clientes puede tener uno o varios vehículos y los vehículos o bien pertenecen a un cliente o bien no pertenecen a nadie (supón que son vehículos que se han traído desde la chatarra al taller).

El contenido inicial de las tablas es el siguiente:

Contenido inicial de la tabla clientes.

Contenido inicial de la tabla clientes.

Como podemos ver tenemos 9 clientes con códigos que van desde el “00001” al “00010” (el “00007” no está)

Contenido inicial de la tabla vehículos.

Contenido inicial de la tabla vehículos.

Como vemos hay 16 vehículos pero hay 2  que no tienen cliente asociado y además si nos fijamos bien sólo 8 clientes tienen vehículos, el cliente “00007” es cliente pero no ha traído vehículos.

Con estos datos vamos trabajar con los siguientes JOINS

  • INNER JOIN o “join normal”
  • LEFT JOIN
  • LEFT JOIN con los valores nulos
  • RIGHT JOIN
  • RIGHT JOIN con los valores nulos
  • NATURAL JOIN
  • FULL OUTER JOIN
  • FULL OUTER JOIN con los valores nulos.

INNER JOIN o “join normal”

El resultado es:

Resultado del Inner Join o join normal

Resultado del Inner Join o join normal

En este caso da igual el orden de las tablas alrededor del join y la claúsula INNER es opcional. ¿Qué estamos obteniendo? 14 filas, una por cada coche que tiene cliente asociado. Aquellos coches que no tienen cliente asociado  no salen en la consulta y aquellos clientes sin coche tampco. Y de los campos de las dos tablas sólo mostraré el código del cliente  y la matrícula por razones de comodidad para presentarlo en este post.

LEFT JOIN

Para demostrar cómo funciona realizaremos dos consultas:

El resultado para la primera de ellas es el siguiente:

Left Join de Clientes

Left Join de Clientes

Nos muestra todos los clientes aunque no tengan coche asociado y para aquellos que sí una fila por cada uno de los coches que tienen. Se ve como sale el cliente “00008”  que no tiene coche alguno.

Para la segunda consulta el resultado sería:

Left Join con Vehículos

Left Join con Vehículos

Podemos ver que nos saca todos los vehículos junto con los datos de su dueño y, además, también aquellos vehículos que no tiene dueño. En nuestro caso hay dos, aquellos con las matrículas “0011 ABC” “5566 ABC”.

LEFT JOIN CON LOS VALORES NULOS

Para demostrar cómo funciona realizaremos dos consultas:

El resultado para la primera de ellas es el siguiente:

Left Join con Clientes y valores nulos

Left Join con Clientes y valores nulos

En este caso únicamente obtenemos los clientes que no poseen ningún vehículo. Esto también se podría hacer con una subconsulta.

El resultado para la segunda consulta sería:

Left Join con Vehículos y valores nulos

Left Join con Vehículos y valores nulos

En este caso sólo obtendríamos los coches que carecen de cliente asociado. Se podría hacer también con una subconsulta.

RIGHT JOIN

El funcionamiento es análogo al left join pero en este caso es se tendrán en cuenta todas las filas de la tabla que está a la derecha del join.

Para demostrar el funcionamiento vamos a probar con dos consultas:

El resultado de la primera será:

Right Join con Vehículos

Right Join con Vehículos

Como vemos obtenemos todos los vehículos aunque no tengan dueño. Y para aquellos que sí lo tienen salen los datos de su dueño.

Si ejecutamos la segunda consulta:

Right Join con Clientes

Right Join con Clientes

Me salen todos los clientes (una vez por cada vehículos que posean) e incluso me salen aquellos que no poseen vehículos (el “00008”)

RIGHT JOIN con valores nulos

Para demostrar su funcionamiento ejecutaremos las siguiente consultas:

Al ejecutar la primera obtenemos:

Right Join con vehículos y valores nulos

Right Join con vehículos y valores nulos

Es decir sólo aquellos coches sin dueño y con null en todas las celdas correspondientes al dueño.

El resultado de la segunda consulta sera:

Right Join con clientes y valores nulos

Right Join con clientes y valores nulos

Es decir únicamente aquellos clientes que no tienen coches con null en todas las celdas correspondientes a los coches.

ES MUY IMPORTANTE COMPARAR LOS RESULTADOS DE LEFT JOIN y RIGHT JOIN Y VER LAS ANALOGÍAS EXISTENTES.

NATURAL JOIN

Para demostrar el funcionamiento del natural join vamos a realizar la siguiente consulta:

El resultado será:

Natural Join

Natural Join

Como se puede ver es el mismo resultado que en un INNER JOIN pero debemos tener cuidado ya que con NATURAL JOIN UTILIZA LAS COLUMNAS QUE SE LLAMAN IGUAL EN LAS DOS TABLAS PARA HACER EL JOIN. Si no es así obtendremos resultados imprevistos. También se puede añadir LEFT o RIGHT detrás del NATURAL y delante del JOIN.

OUTER JOIN

MySQL no soporta FULL OUTER JOIN aunque nos da una manera alternativa para hacerlo:

Al hacerlo el resultado sería:

Outer Join

Outer Join

Es decir todos los clientes aunque no tengan vehículos, todos los vehículos aunque no tengan clientes y una fila para cada asociación cliente-vehículo.

Es importante destacar que esta operación no en todos los casos nos va a dar una respuesta correcta. Para más información al respecto es bueno revisar este post.

FULL OUTER JOIN CON VALORES NULOS

Sucede los mismo que en el caso anterior:

El resultado será:

Full Outer Join con valores nulos

Full Outer Join con valores nulos

Es decir tanto los vehículos sin dueño como los clientes sin coche.

Podemos resumir esto en el siguiente gráfico.

Obtenida de WikiMedia Commons

Para más información y detalle deberíamos visitar la documentación de MySQL.

En otros gestores el funcionamiento y la sintaxis puede ser ligeramente diferente.

GitHub en clase

githublogoMis alumnos van a tener que tener, DE MANERA OBLIGATORIA, su cuenta en GitHub.

No es algo nuevo, en muchos sitios ya se utiliza GitHub como herramienta docente.

No es por capricho, GitHub ya se ha convertido en un estándar y en muchos trabajos para programadores se pide su perfil en dicha plataforma.

No es porque sí, durante los últimos años muchos de nuestros alumnos han encontrado trabajo y, pese a ser un Ciclo de Administración de Sistemas, lo trabajos se relacionaban más con la programación y la web. El hecho de que tengan un portfolio público de código hecho por ellos creo puede aumentar su motivación para hacer las cosas bien y aumentar su posibilidades de encontrar un futuro trabajo.

La usaremos al menos para las asignaturas de Lenguajes de Marcas e Implantación de Aplicaciones Web.

Algunas ideas sobre los MOOCs

El término MOOC (Massive Online Open Course) está muy presente últimamente en todas las charlas y debates educativos.Es lo que los anglo-hablantes llaman  una buzzword. ¿Y qué significa este concepto?. Básicamente una buzzword es una palabra de moda que tiene gran impacto y repercusión y que, si las pones es una conversación, denota que eres casi un experto en el asunto.

Antes que nada me gustaría ir a los principios básicos de los MOOC, relacionados fuertemente con el conectivismo (fuente Wikipedia):

  • Gran interacción y retroalimentación entre los diferentes participantes, revisión por parejas, colaboración etc..
  • Retroalimentación automática mediante tareas, exámenes y cuestionarios online.
  • Agregación y mezcla de los distintos contenidos creados en contraposición con los cursos tradicionales donde el contenido está preparado de antemano.

Simplificando un poco, la idea es que el aprendizaje es un MOOC es individual, porque cada uno lleva su ritmo y su orden, es colectivo porque es el propio grupo de alumnos motivados el que logra un aprendizaje efectivo en base a la colaboración y abierto porque suelen ser cursos gratuitos y que,en muchos de los casos, carecen de fecha de inicio y de finalización

El caso es que “no es oro todo lo que reluce ni todo el que anda errante está perdido”. Los MOOC, como todo en esta vida, tienen su cosas negativas y sus cosas positivas. Si me permiten pasaré a ellas.Y entiendan que es siempre desde mi punto de vista, como profesional docente y como alumno de MOOC (siempre siempre tiene muchísimo valor la opinión de los alumnos).

Cosas que no me gustan:

  • El papel del profesor queda bastante difuminado. Los que me conocéis ya sabéis que no soy partidario del profesor tradicional pero en los MOOC, con cursos de miles de alumnos el papel muchas veces se limita a crear contenidos y a dar alguna que otra pauta. Evidentemente es inviable atender a miles de alumnos. Y de esta manera se pierde todo el valor, que sea de la forma que sea, pueda aportar el profesor. No me refiero a las transmisión de los contenidos, si no a la guía, a las recomendaciones, los proyectos propuestos etc, etc…
  • En muchos casos, aunque la idea sea buena, tienen mucho de negocio y marketing. Buscan en muchos casos preservar el prestigio de la institución que lo ofrece y vender materiales de clase. Esto, en sí mismo, no es malo pero me surge la pregunta de si el adjetivo Open no es mera decoración. ¿No se conseguiría lo mismo liberando esos materiales y usando luego una comunidad abierta de Google+?. Supongo que sí, pero en este caso las instituciones no podrían almacenar y recopilar datos e información de esta ingente cantidad de usuarios.
  • El abandono es muy grande, precisamente por la aparente desorganización y porque, como en toda comunidad online o red social, al final son muy pocos los que realmente participan, lo que puede dejar dudas y situaciones sin resolver. No tienes asegurada una respuesta.Lo siento es así, no todo el mundo colabora y no todo el mundo que colabora puede aclarar todas las dudas.
  • Tengo mis serias dudas de que sean válidos para todo tipo de públicos. Si las personas tienen un fuerte interés en la temática,  son tIC-competentes, saben como aprender colaborando y, a la vez, son muy capaces de autoformarse es posible que sean efectivos. Pero no nos engañemos, no todo el mundo reúne estas características.
  • No todos los profesores que hacen MOOCs son profesores de Stanford o Harvard (por poner un ejemplo paradigmático). Créanme hay MOOCs muy malos  por el mundo, tanto por su diseño instruccional como por sus materiales.

Y cosas que sí me gustan:

  • Te permiten acceder a conocimientos y compañeros interesado en lo mismo a los que de otra forma será muy difícil de acceder.
  • Te facilita el acceso a docentes de gran calidad y a los materiales que puedan haber creado (aunque sea en pequeñas dosis)

Ahí queda dicho. Acabaré con una pregunta ¿Y si le quitamos la M de Massive y lo dejamos en OOC con más participación del profesor?