Libros sobre Firebird en castellano

24 comentarios

Tengo entendido que este blog es la principal fuente de información sobre Firebird en idioma castellano (y no lo digo para auto-alabarme o algo así).

Hay libros sobre Firebird en otros idiomas (inglés, portugués, ruso, etc.) pero creo que no hay en castellano, ni siquiera traducidos.

En estos últimos meses varios lectores del blog me han pedido que escriba un libro sobre Firebird. La idea me parece interesante aunque me tomará mucho tiempo realizarla, mi tiempo libre es muy escaso.

Inicialmente pensé en escribir un libro con una selección de los artículos del blog, mejorados por supuesto, para que sean más útiles. Pero el tema es tan amplio que quizás ni en un año terminaría el libro.

Y luego se me ocurrió que había una alternativa, empezar con algo más modesto al principio.

Algo que muchos necesitamos es escribir SELECTs para realizar consultas a las bases de datos, y cuanto más rápido escribamos esos SELECTs y cuanto más rápido se ejecuten, mejor. Entonces, mi idea actual es escribir un libro que trate sólo y exclusivamente sobre SELECTs.

El título tentativo del libro (que por supuesto podría cambiarlo más adelante) es: “Consultas con Firebird. De principiante a experto”

A grosso modo creo que tendrá unos 200 a 250 SELECTs, todos explicados claramente para que sea fácil entender lo que hacen y como lo hacen. Habrá una Base de Datos que podrán descargar desde Internet para poder ejecutar esos ejemplos y comprobar los resultados.

Aún no sé como comercializaré el libro. Desde luego que todos preferirían que sea gratis (y quizás lo sea) pero estoy pensando en que podría cobrar algunos dólares por la descarga, porque escribirlo me llevará mucho tiempo.

Si funciona, y tiene éxito, entonces escribiré otro libro más completo y más detallado.

En fin, esa es la idea, ¿qué opinan? Espero sus comentarios.

Walter.

 

Anuncios

Usando el comando NET del Windows

Deja un comentario

Este artículo no está directamente relacionado con Firebird pero puede serte útil alguna vez.

Windows tiene un comando llamado NET (red, en castellano) que se usa para realizar diversas tareas en la red. Pues ver las opciones disponibles simplemente escribiendo NET y presionando la tecla Enter.

NET1

Captura 1. Si haces clic en la imagen la verás más grande

Si quieres ayuda sobre alguna de esas opciones entonces escribes NET, el nombre de la opción, y el símbolo de interrogación, así:

NET2

Captura 2. Si haces clic en la imagen la verás más grande

Es conveniente que leas sobre cada una de las opciones del comando NET porque pueden serte muy útiles. Aquí y ahora veremos la opción USE.

NET3

Captura 3. Si haces clic en la imagen la verás más grande

¿Para qué sirve NET USE? Para compartir recursos.

Ejemplo 1. Mapear una carpeta

NET4

Captura 4. Si haces clic en la imagen la verás más grande

La carpeta NEGOCIOS es una carpeta compartida de la computadora que tiene el IP 192.168.0.4

A partir de este momento, aunque la carpeta NEGOCIOS se encuentre en otra computadora podemos escribir algo como DIR Z: para ver el contenido de esa carpeta.

NET5

Captura 5. Si haces clic en la imagen la verás más grande

 Y con el Explorador del Windows veremos algo como esto:

NET6

Captura 6. Si haces clic en la imagen la verás más grande

Donde, como puedes ver, te muestra que la unidad Z: está mapeada a la carpeta NEGOCIOS de la computadora que tiene el IP 192.168.0.4

Eso implica que a partir de este momento en lugar de escribir \\192.168.0.4\NEGOCIOS puedes escribir simplemente Z:, y será lo mismo.

Desde luego que no solamente puedes usar la letra Z, puedes usar cualquier letra que no esté en uso, entre la D y la Z inclusives. En mi caso como C, D, y E ya están usadas entonces las letras que puedo usar van desde la F hasta la Z.

Ejemplo 2. Desmapear una carpeta

Ok, supongamos que ya no quieres que la carpeta NEGOCIOS continúe mapeada ¿qué haces?

NET7

Captura 7. Si haces clic en la imagen la verás más grande

Y a partir de este momento ya no podrás acceder a la carpeta NEGOCIOS mediante la unidad Z:

Artículo relacionado:

El índice del blog Firebird21

Guardando las columnas BLOB en tablas separadas

5 comentarios

Las columnas de tipo BLOB nos permiten guardar en ellas contenido muy grande: típicamente mayor a 32765 bytes. ¿Por qué ese número? Porque una columna de tipo VARCHAR puede guardar hasta 32765 bytes entonces usaríamos una columna BLOB cuando necesitamos un espacio de almacenamiento mayor.

El contenido de las columnas de tipo VARCHAR puede ser indexado, el contenido de las columnas de tipo BLOB no puede ser indexado.

Entonces, si estamos seguros de que la columna siempre contendrá menos de 32765 bytes lo conveniente es que sea de tipo VARCHAR, para poder indexarla cuando lo deseemos.

Ok, ya estudiamos el caso y decidimos que necesitamos una columna de tipo BLOB, ¿en cuál tabla la guardamos?

Aquí tenemos dos posibilidades:

  1. Guardarla en la misma tabla que los demás datos
  2. Guardarla en una tabla separada

Por ejemplo, tenemos una tabla de EMPLEADOS y queremos guardar las fotografías de los empleados. O tenemos una tabla de VENTAS y queremos guardar las facturas escaneadas.

Si elegimos la posibilidad 1. entonces debemos olvidarnos por completo de escribir algo como SELECT * FROM EMPLEADOS, o como SELECT * FROM VENTAS, porque el tiempo que se demorará en obtener el conjunto resultado puede ser muy grande.

Por el contrario, si elegimos la posibilidad 2. nunca tendremos ese problema ya que la columna BLOB se encuentra en otra tabla y para leer su contenido debemos específicamente escribir un JOIN.

Elegir la posibilidad 1. tiene las ventajas de que nuestros SELECTs son más sencillos de escribir y que usamos menos espacio en el disco duro pero tiene la desventaja de que los resultados se obtienen más lentamente. Y nuestra prioridad siempre debe estar enfocada en conseguir la máxima velocidad posible.

Ejemplo. Guardar las fotografías de los empleados

BLOB1

Captura 1. Si haces clic en la imagen la verás más grande

En la Captura 1. vemos la estructura de la tabla EMPLEADOS.

BLOB2

Captura 2. Si haces clic en la imagen la verás más grande

Y en la Captura 2. vemos la estructura de la tabla EMPLEADOSFOT, que es la tabla donde guardamos las fotografías de los empleados.

Evidentemente al usar dos tablas estamos ocupando más espacio en el disco duro porque tenemos dos columnas (EMF_IDENTI y EMF_IDECAB en nuestro ejemplo) que no necesitaríamos si usáramos una sola tabla.

Al usar dos tablas cuando consultamos a la tabla de EMPLEADOS no recuperamos las fotografías, para recuperarlas debemos escribir un JOIN similar a éste:

SELECT
   E.EMP_IDENTI,
   E.EMP_NOMBRE,
   E.EMP_APELLD,
   F.EMF_FOTOGR
FROM
   EMPLEADOS    E
LEFT JOIN
   EMPLEADOSFOT F
      ON E.EMP_IDENTI = F.EMF_IDECAB

Empleamos la cláusula LEFT JOIN para poder obtener los datos de todos los empleados, inclusive los de aquellos que no tienen fotografías.

Conclusión:

Si necesitas tener columnas de tipo BLOB entonces lo conveniente y lo recomendable es guardarlas en tablas separadas. Relacionarás la tabla padre y la tabla hija con un identificador común para escribir la cláusula JOIN cuando necesites recuperar la columna de tipo BLOB, tal como se vio en el SELECT de arriba.

Si guardas los datos y la columna de tipo BLOB en una sola tabla entonces tus SELECTs serán más sencillos de escribir y ahorrarás espacio en el disco duro. Pero tus consultas serán más lentas.

Y tu prioridad debería ser tener consultas rápidas, ya que en esta época usar unos pocos bytes más no importa.

Artículos relacionados:

Usando columnas de tipo BLOB

El índice del blog Firebird21

 

Recordatorio sobre libros de Informática gratis

2 comentarios

Desde el día jueves 24 de abril hasta el día viernes 25 de abril de 2014 la Editorial ENI permitirá la lectura a través de su sitio web de libros de Informática, son algo más de 180 títulos sobre temas variados, tanto para principiantes como para avanzados.

Para registrarte debes acceder a esta página:

http://www.ediciones-eni.com/librosgratis

donde te pedirán tu e-mail, al cual enviarán la contraseña que usarás para acceder a la lectura de los libros.

Aprovecha la oportunidad, siempre es bueno aprender más.

Artículos relacionados:

Libros gratis sobre Informática durante dos días

El índice del blog Firebird21

 

Nombres de tablas con guión bajo

Deja un comentario

Si quieres que el nombre de una tabla empiece con un guión bajo tendrás problemas porque el Firebird no admite al guión bajo como primer carácter del nombre de una tabla.

Sin embargo … hay una solución.

Y la solución es rodear al nombre de la tabla con comillas, así:

CREATE TABLE
   "_CON_GUION"
   (GUI_IDENTI INTEGER,
    GUI_NOMBRE VARCHAR(40));

Desde luego que para acceder a esa tabla siempre tendrás que usar las comillas, por ejemplo:

INSERT INTO "_CON_GUION"
           (GUI_IDENTI, GUI_NOMBRE)
    VALUES (1         , 'SILVIA BEATRIZ');

SELECT
   *
FROM
   "_CON_GUION"

Conclusión:

A veces podría ser útil que los nombres de algunas tablas empiecen con un guión bajo, el Firebird no nos permite eso, salvo que el nombre de la tabla esté rodeado por comillas.

Artículo relacionado:

El índice del blog Firebird21

 

Optimizando las subconsultas

2 comentarios

Las subconsultas son una herramienta muy útil que tenemos a nuestra disposición pero que en ocasiones pueden ser muy lentas. Consideremos este caso:

SELECT
   C.MVC_FECHAX,
   C.MVC_NRODOC,
   (SELECT SUM (D.MOV_CANTID * D.MOV_PRECIO) FROM MOVIMDET D WHERE D.MOV_IDECAB = C.MVC_IDENTI),
   (SELECT MAX (D.MOV_CANTID * D.MOV_PRECIO) FROM MOVIMDET D WHERE D.MOV_IDECAB = C.MVC_IDENTI),
   (SELECT MIN (D.MOV_CANTID * D.MOV_PRECIO) FROM MOVIMDET D WHERE D.MOV_IDECAB = C.MVC_IDENTI),
   (SELECT AVG (D.MOV_CANTID * D.MOV_PRECIO) FROM MOVIMDET D WHERE D.MOV_IDECAB = C.MVC_IDENTI)
FROM
   MOVIMCAB C

Aquí, tenemos una tabla cabecera de movimientos (MOVIMCAB) y una tabla de detalles de movimientos (MOVIMDET).

Y lo que nos interesa es hallar, para cada venta realizada, el total de esa venta (usamos la función SUM()), la línea con el mayor total (usamos la función MAX()), la línea con el menor total (usamos la función MIN()), y el promedio de las líneas (usamos la función AVG()).

Todo bien hasta aquí y el SELECT anterior cumple con su objetivo pero … hay un pero. Y ese pero es que escribimos 4 subconsultas. Y cada subconsulta es independiente a las otras y por lo tanto se emplea mucho tiempo en obtener los resultados deseados. Se los obtiene, sí, pero se demora mucho en obtenerlos (por supuesto que en el caso de tablas muy grandes, si las tablas son pequeñas no se notará la demora).

Entonces, ¿podemos optimizar este SELECT para que se ejecute más rápido?

Sí, podemos.

El truco es realizar una sola subconsulta, y en ella obtener todos los datos que nos interesan, como vemos a continuación:

 

SELECT
   C.MVC_FECHAX,
   C.MVC_NRODOC,
   CAST(LEFT     (TodoJunto, 10)            AS BIGINT),
   CAST(SUBSTRING(TodoJunto FROM 11 FOR 10) AS BIGINT),
   CAST(SUBSTRING(TodoJunto FROM 21 FOR 10) AS BIGINT),
   CAST(RIGHT    (TodoJunto, 10)            AS BIGINT)
FROM
   (SELECT
       MOVIMCAB.MVC_IDENTI,
       (SELECT
           LPAD(SUM(MOV_CANTID * MOV_PRECIO), 10) ||
           LPAD(MAX(MOV_CANTID * MOV_PRECIO), 10) ||
           LPAD(MIN(MOV_CANTID * MOV_PRECIO), 10) ||
           LPAD(AVG(MOV_CANTID * MOV_PRECIO), 10)
        FROM
           MOVIMDET
        WHERE
           MOV_IDECAB = MVC_IDENTI) AS TodoJunto
    FROM
       MOVIMCAB) AS DERIVADA
JOIN
   MOVIMCAB C
      ON C.MVC_IDENTI = DERIVADA.MVC_IDENTI

 Aquí, para cada fila de la tabla MOVIMDET se realiza una sola subconsulta y se concatenan las columnas para guardarlas con el alias TodoJunto.

Como puedes ver, esta consulta es más complicada de escribir que la original, pero la ventaja es que se obtienen los resultados mucho más rápidamente porque cada fila de la tabla MOVIMDET es recorrida una sola vez, no 4 veces como en la consulta original.

Conclusión:

Se pueden optimizar las subconsultas concatenando las columnas que nos interesan y luego “desconcatenarlas”.

Esta técnica para optimizar las subconsultas es muy útil cuando las tablas son muy grandes (es decir: tienen millones de filas) porque se consigue obtener los resultados muy rápido. El motivo es que cada fila de la tabla de detalles se recorre una sola vez.

Si no usamos esta técnica, cada fila de la tabla de detalles sería recorrida 4 veces. Y recorrer las filas 4 veces evidentemente es mucho más lento que recorrerlas 1 sola vez.

Sin embargo, si las tablas son pequeñas y siempre lo serán, probablemente no valga la pena el esfuerzo de optimizar las subconsultas.

Así que queda a tu criterio si decides optimizarlas o no, pero al menos ya conoces una técnica para optimizarlas si lo deseas.

Artículos relacionados:

Tablas derivadas

Entendiendo subconsultas y tablas derivadas

El índice del blog Firebird21

 

Usando MEGA para guardar archivos en la nube

Deja un comentario

Desde hace un tiempo han surgido varios programas que te permiten guardar tus archivos en la nube, quizás el más famoso de todos ellos es Dropbox.

Ahora, tenemos otra opción: Mega.

Mega es el nuevo nombre de MegaUpload, un sitio web muy popular para guardar y descargar archivos grandes que fue clausurado por intervención del FBI y de la NSA yanquis.

Como te puedes imaginar, ambas agencias no está bien conceptuadas en la mente de la mayoría de los internautas. Ni en la de Mega, como descubrirás si instalas el programa.

¿Qué te ofrece Mega?

  • 50 Gb gratis, para guardar allí cualquier tipo de archivo. También puedes renombrarlos, moverlos o eliminarlos
  • Encriptación de alto nivel durante la transferencia, para evitar que el FBI, la NSA, o cualquier otra agencia curiosee en tus archivos
  • Poder crear todas las carpetas y subcarpetas que desees. También puedes renombrarlas, moverlas o eliminarlas
  • Elegir el idioma que más te guste, el castellano (español) entre ellos
  • Limitar el ancho de banda usado para las transferencias, para no interferir con las otras subidas o descargas que realices
  • Excluir archivos, o extensiones de archivos, para no subirlos a la nube
  • La posibilidad de obtener más espacio en la nube, aunque eso tendrás que pagarlo

¿Para qué puedes usar Mega?

  • Para subir a la nube cualquier archivo y así tener un backup actualizado del mismo. Podrías subir tus programas fuente, tus fotografías, tus planillas Excel, tus documentos Word, tus documentos PDF, tus canciones, y en general cualquier archivo que desees.
  • Si le ocurriera algún daño a tu disco duro o a tu pen-drive pues ningún problema con eso, tus archivos aún estarán a tu disposición porque estarán guardados también en la nube, desde donde los podrás descargar cuando lo desees.

¿Para qué NO deberías usar Mega?

Para guardar en la nube tu Base de Datos y permitir a los usuarios que se conecten a ella. Por supuesto que puedes guardar una copia de tu Base de Datos en la nube pero solamente como backup, los usuarios no deberían conectarse a ella o la corromperán gravemente.

¿Desde dónde se puede descargar el instalador de Mega?

https://mega.co.nz/MEGAsyncSetup.exe

Artículos relacionados:

¿Se puede usar DropBox con bases de datos?

El índice del blog Firebird21

El foro del blog Firebird21

Older Entries Newer Entries