Lógicamente, esta es una vía "ideal". Quizás no debe completarse completamente, si no hemos de trabajar en proyectos muy complejos Java es una exageración, o bien la vida nos lleve a sumergirnos en otras tecnologías, pero es un recorrido completo. Si no llegamos a Java (o incluso si llegamos), puede ser conveniente pasar tiempo usando algún microframework que no nos dé un stack completo como el de Django, Django nos lo da casi todo mascado y seguramente hay detalles interesantes de conocer a bajo nivel que nos perdamos. Hacer desarrollo web sin un stack completo ciertamente puede ayudarnos a completar nuestras habilidades. Podemos hacer esto tanto en Python (usando un microframework de los muchos existentes, o incluso desarrollando el nuestro) como en Java (programando directamente servlets en vez de usar el MVC de Spring) o en cualquier otro lenguaje.
-nota: más ediciones y sugerencias del de siempre[11].
-
-
-=> http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html 1: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
-=> http://www.php.net/ 2: http://www.php.net/
-=> http://www.perl.org 3: http://www.perl.org
-=> http://en.wikipedia.org/wiki/JavaScript 4: http://en.wikipedia.org/wiki/JavaScript
-=> http://msdn.microsoft.com/en-us/vstudio/hh388566.aspx 5: http://msdn.microsoft.com/en-us/vstudio/hh388566.aspx
-=> http://msdn.microsoft.com/en-us/vstudio/hh388568.aspx 6: http://msdn.microsoft.com/en-us/vstudio/hh388568.aspx
-=> http://www.python.org/ 7: http://www.python.org/
-=> https://www.djangoproject.com/ 8: https://www.djangoproject.com/
-=> http://www.oracle.com/technetwork/java/index.html 9: http://www.oracle.com/technetwork/java/index.html
-=> http://jquery.com/ 10: http://jquery.com/
-=> http://obm.corcoles.net 11: http://obm.corcoles.net
\ No newline at end of file
+=> https://www.tiobe.com/tiobe-index/ [1] El índice TIOBE
+=> https://www.php.net/ [2] PHP
+=> https://www.perl.org [3] Perl
+=> https://en.wikipedia.org/wiki/JavaScript [4] JavaScript
+=> https://docs.microsoft.com/en-us/dotnet/csharp/ [5] C#
+=> https://docs.microsoft.com/en-us/dotnet/visual-basic/ [6] Visual Basic .NET
+=> https://www.python.org/ [7] Python
+=> https://www.djangoproject.com/ [8] Django
+=> https://www.oracle.com/java/ [9] Java
+=> https://jquery.com/ [10] jQuery
+
+=> http://obm.corcoles.net nota: más ediciones y sugerencias del de siempre
# Esquemas de datos explícitos e implícitos
2013-06-06
-Hablando de bases de datos relacionales, es común referirse al esquema de datos como la definición de las tablas, vistas, funciones, etc. que conforman la base de datos*. El esquema es sumamente importante, por supuesto, nos define qué datos admitimos y nos condiciona todo código que accede a la base de datos.
+Hablando de bases de datos relacionales, es común referirse al esquema de datos como la definición de las tablas, vistas, funciones, etc. que conforman la base de datos[1]. El esquema es sumamente importante, por supuesto, nos define qué datos admitimos y nos condiciona todo código que accede a la base de datos.
Este es un esquema explícito; está ahí, podemos enumerar los objetos de los que se compone y conocer milimétricamente su estructura; podemos saber qué tablas hay y qué columnas tienen, etc.
-Ahora bien, supongamos que cogemos una aplicación que usa una base de datos y de repente, ocultamos el esquema. Asumamos por un momento que no podemos saber qué tablas hay, ni qué columnas, ni nada. Aún haciendo este gran cambio, nuestra aplicación seguirá funcionando**. Aún más, si desconectamos todas las restricciones de integridad y admitimos que se inserten valores en columnas que no existen (e incluso los almacenamos)... nuestra aplicación muy probablemente seguirá funcionando correctamente.
+Ahora bien, supongamos que cogemos una aplicación que usa una base de datos y de repente, ocultamos el esquema. Asumamos por un momento que no podemos saber qué tablas hay, ni qué columnas, ni nada. Aún haciendo este gran cambio, nuestra aplicación seguirá funcionando[2]. Aún más, si desconectamos todas las restricciones de integridad y admitimos que se inserten valores en columnas que no existen (e incluso los almacenamos)... nuestra aplicación muy probablemente seguirá funcionando correctamente.
La primera observación interesante que podemos hacer es que aquello a lo que llamábamos el esquema de datos puede que no esté ahí, pero los datos que tenemos almacenados seguirán siguiendo el anterior esquema de datos. La programación seguirá condicionada por ese mismo esquema; seguiremos insertando en las tablas y columnas que definía el esquema.
Pero cuando nos llegue el momento de modificar o ampliar el código, sí tendremos un problema: al no poder consultar el esquema, se dificultará mucho nuestra labor. El esquema explícito era eso: explícito, claro, fácil. El esquema implícito sigue ahí, pero está oculto. Lo duro es que antes bastaba con ajustarnos al esquema explícito de los datos, que estaba delante de nuestros ojos, pero ahora seguimos teniéndo que seguir un esquema de datos implícito, mucho más críptico. Tendremos que mirar los datos almacenados o el código para saber cómo se llamaba cada tabla y cada columna, y esta información muy probablemente no esté centralizada.
-Por supuesto, hay un caso en el que sí seguirá disponible. Si usamos un algo como un ORM, podremos contar con otro esquema explícito de datos; la definición del ORM -e incluso en algunos casos podremos reconstruir perfectamente el esquema a partir de la definición del ORM- claramente son conceptos si no equivalentes siempre, muy cercanos***. Si este esquema es suficientemente bueno, podría suplir perfectamente al esquema explícito de las bases de datos (e incluso mejorarlo: podría permitirnos expresar un esquema de datos más restringido).
+Por supuesto, hay un caso en el que sí seguirá disponible. Si usamos un algo como un ORM, podremos contar con otro esquema explícito de datos; la definición del ORM -e incluso en algunos casos podremos reconstruir perfectamente el esquema a partir de la definición del ORM- claramente son conceptos si no equivalentes siempre, muy cercanos[3]. Si este esquema es suficientemente bueno, podría suplir perfectamente al esquema explícito de las bases de datos (e incluso mejorarlo: podría permitirnos expresar un esquema de datos más restringido).
Podríamos decir que el esquema de datos explícito de la base de datos no es estrictamente necesario, pero ciertamente, **un** esquema de datos explícito es una herramienta muy útil, quizás no tanto para el funcionamiento de las aplicaciones como para su codificación y mantenimiento.
Así pues, aunque es posible que un esquema relacional no sea lo más adecuado para nuestros datos, es falaz concluir que la ausencia de un esquema explícito es una ventaja -el esquema implícito sigue existiendo y nos debemos ajustar a él- y es más fácil ajustarse a algo explícito y claro que a algo implícito y oculto.
-* en algunos gestores de bases de datos, el término se confunde un poco porque se pueden separar los objetos de la base de datos en "esquemas" para gestionarlos mejor
+[1] en algunos gestores de bases de datos, el término se confunde un poco porque se pueden separar los objetos de la base de datos en "esquemas" para gestionarlos mejor
-** las bases de datos permiten a las aplicaciones consultar el esquema [explícito]; hay aplicaciones que utilizan esta funcionalidad (para permitir su personlización mediante la creación de nuevas tablas, etc.); en este poco frecuente caso, dejarían de funcionar, claro
+[2] las bases de datos permiten a las aplicaciones consultar el esquema [explícito]; hay aplicaciones que utilizan esta funcionalidad (para permitir su personlización mediante la creación de nuevas tablas, etc.); en este poco frecuente caso, dejarían de funcionar, claro
-*** lo que nos debería llevar a pensar que uno de los dos es redundante e innecesario
+[3] lo que nos debería llevar a pensar que uno de los dos es redundante e innecesario
-corregido por el de siempre[1]
-
-
-=> http://obm.corcoles.net 1: http://obm.corcoles.net
\ No newline at end of file
+=> https://obm.corcoles.net corregido por el de siempre