Mostrando entradas con la etiqueta bases de datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta bases de datos. Mostrar todas las entradas

viernes, 13 de abril de 2012

(n+1)*n/2

La suma de los N primeros números naturales es
S = (N+1)*N/2

Utilidad aplicada:

Supongamos un modelo de datos (una tabla) en el que hay un atributo para ordenar, un entero correlativo que empieza en 0. Para garantizar la coherencia de los datos, tenemos que asegurarnos que cada operación de modificación deja la tabla bien:

Aquí tenemos un ejemplo de datos coherentes:
+--------+-------+
| _order | id    |
+--------+-------+
|      0 | 18685 |
|      1 | 21971 |
|      2 | 21979 |
|      3 | 21977 |
|      4 | 21975 |
|      5 | 21973 |
|      6 | 22047 |
+--------+-------+


Y aquí uno de datos no coherentes: se ha borrado un dato pero no se ha actualizado bien el _order en la tabla:

+--------+-------+
| _order | id    |
+--------+-------+
|      0 | 18685 |
|      1 | 21971 |
|      2 | 21979 |
|      3 | 21977 |
|      4 | 21975 |
|      6 | 21973 |
|      7 | 22047 |
+--------+-------+


¿Cómo comprobar en una tabla estas incoherencias? Aquí entra en juego nuestra fórmula.

Si todo está bien, la suma de los _order + 1 debe ser igual a la suma de los n enteros hasta los N registros que tengamos en la tabla.



SELECT COUNT(id), 
cliente,
SUM(_order+1) AS suma_order,
ROUND((COUNT(id)+1)*COUNT(id)/2, 0) AS suma_buena
FROM tabla
GROUP BY cliente
HAVING ROUND((COUNT(id)+1)*COUNT(id)/2, 0) != SUM(_order+1)
ORDER BY COUNT(id);

miércoles, 12 de enero de 2011

Fallos tontos con INSERT en SQL

El otro día tuve que arreglar un "bug" que yo mismo había causado. En un momento dado, se guardaba un valor en una tabla de N campos. Mi "query" era la siguiente:
INSERT INTO miTabla VALUES ('valor1', 'valor2', 'valor3');

En un momento dato, se hizo necesario añadir un campo más a esta tabla. Inocente de mí, pensé lo siguiente: "si añado el campo con un valor por defecto, no se estropeará ninguna "query", ya que, aunque la consulta no mencione el campo, éste ya tiene un valor por defecto".
Craso error.
La "query" anterior fallaba (estoy utilizando MySQL), ya que se encontraba con un campo más de lo esperado.
Conclusión: hay que escribir explícitamente todos los campos en los INSERT. Nunca se sabe qué cambiará.
INSERT INTO miTabla (campo1, campo2, campo3) VALUES ('valor1', 'valor2', 'valor3');

miércoles, 23 de enero de 2008

Viejitos muy actuales

Parece que en esto de la informática se evoluciona muy rápido, que todo es lo último de lo último, ... pero no.

En esta entrada quiero recordar algunas tecnologías con varias décadas a sus espaldas que se siguen utilizando hoy en día.

  • El lenguaje de programación C:
    En 1972 Ken Thompson y Dennis M. Ritchie diseñaron un lenguaje de programación para utilizarlo en el sistema operativo UNIX. 35 años más tarde, sigue siendo uno de los lenguajes más utilizados en la programación de sistemas operativos, programas en los que el rendimiento es crítico y muchas más aplicaciones.

  • El sistema operativo UNIX:
    Íntimamente ligado al lenguaje C, su desarrollo comenzó en 1969, basado en otro sistema llamado MULTICS. A lo largo de los años se han desarrollado múltiples variantes y clones. Algunos sistemas UNIX actuales: Mac OSX, Linux, la familia de sistemas BSD, Solaris, ... y bastantes más.

  • El lenguaje COBOL:
    Son las siglas de "Lenguaje Común Orientado a Negocios" (en inglés). Como su nombre indica, se utiliza principalmente en sistemas financieros: bancos, aseguradoras, etc. Se diseñó en 1960 y se estima que es uno de los lenguajes más utilizados (en líneas de código escritas).

  • El protocolo TCP/IP:
    Desarrollado en los años 70, este protocolo (conjunto de reglas y especificaciones que utilizan los dispositivos para comunicarse a través de una red) ha demostrado ser fiable y proporciona la base de Internet tal y como la conocemos hoy en día. Otras arquitecturas o protocolos de red han "sucumbido" y no se usan tan ampliamente como TCP/IP.

  • Bases de datos relacionales:
    La teoría fue desarrollada por Codd en 1970 y a lo largo de esa década surgieron distintas bases de datos relacionales. Durante la década de los 80 las bases de datos relacionales (y su lenguaje propio, SQL) se impusieron a otros sistemas de bases de datos, de tal forma que algunas personas jóvenes no hemos conocido otro sistema que no sea el relacional.


Hay muchísimos más ejemplos de tecnologías y sistemas bastante veteranos que siguen utilizándose ampliamente. Existe en todos ellos un denominador común: son tecnologías muy probadas y estables. En muchos entornos, ésta es una cualidad muy valorada.

Animo a los lectores que nos dejen más ejemplos de "viejitos" actuales en los comentarios.

viernes, 13 de abril de 2007

Bases de datos con PHP y Perl

Revisando copias de seguridad me encontré con este artículo. Fue publicado en la revista DLinux de noviembre de 2000. Está totalmente obsoleto, pero puede tener algún interés arqueológico ;-)

He mantenido las erratas y la maquetación (por llamarlo de alguna manera) original.

Artículo: Accediendo a MySQL y Postgresql con PHP y Perl