Mostrando entradas con la etiqueta Bases de Datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bases de Datos. Mostrar todas las entradas

miércoles, 26 de noviembre de 2014

Conceptos en Datawharehouse

Cuando nos disponemos a adentrarnos un poco más en el mundo de las bases de datos multidimensionales y después de saber como se estructura un cubo olap tenemos que aprender algunos nuevos conceptos. En primer lugar observar como se estructuran los cubos en bases de datos relacionales, para lo cual abajo podéis ver como hay que estructurar las tablas en lo que se denomina esquema en estrella que consta de 2 partes fundamentales:

  • Tabla de hechos, que es la tabla central en la que se calculan todas las medidas que queremos almacenar. En el esquema de abajo es la tabla central del dibujo y la medida que queremos guardar es CantSol
  • Tablas de dimensiones: son las tablas que rodean a la tabla de hechos y que como veis contienen los datos para ir clasificando la información agregada o medida que almacenamos en la tabla de hechos







Os voy a presentar 1 concepto que debemos que conocer:

Cuando a una dimensión no se le pueden asociar múltiples atributos, se dice que tenemos una dimensión degenerada, y solo aparecerá como una columna en la tabla de hechos. Por ejemplo, si tuviéramos en nuestro ejemplo una dimensión “Estado de la Venta”, con los posibles valores: “Confirmada”, “Pendiente”, “Cancelada”; en este caso la dimensión serviría solo para separar las ventas según su estado, y no se requieren atributos adicionales.

Es decir, Dimensión Degenerada hace referencia a un campo que será utilizado como criterio de análisis y que es almacenado en la tabla de hechos y que como posee el mismo nivel de granularidad que los datos de la tabla de hechos no se pueden realizar agrupaciones o sumarizaciones a través de este campo. 

domingo, 2 de noviembre de 2014

Los índices bitmap en sql

Los índices son elementos fundamentales para acelerar las consultas en las aplicaciones que creemos. Generalmente los íncides normales son árboles B-tree que aceleran la velocidad de las queries que se lanzan en una Base de datos evitando que los recorridos en las tablas sean secuenciales. Internamente los índices lo que hacen es  almacenar una lista de rowids de las filas de la tabla con el valor clave.

Los índices bitmaps funcionan de forma diferente.  En un indice bitmap, en vez de una lista de rowids, se crea un mapa de bits para cada valor clave del indice. Cada bit del mapa corresponde a un rowid posible. Si el bit esta en 1, significa que el rowid contiene dicho valor clave. Los indices bitmap ofrecen la misma funcionalidad que los indices B-tree, pero con una representacion interna distinta.


IMPORTANTE: Si la cantidad de valores diferentes  que puede tomar el dominio el indice es pequeá, entonces el indice bitmap sera muy eficiente en cuanto al uso de espacio fisico.

Veamos un ejemplo:

Supongamos que tenemos la siguiente tabla de clientes:

CLIENTE      APELLIDO       ESTADO_CIVIL
1            ALONSO         CASADO
2            GARCIA         SOLTERO
3            LOPEZ          DIVORCIADO
4            SAN MARTIN     SOLTERO


La columna estado civil tiene baja cardinalidad, ya que los valores posibles son muy pocos (ESTADO, CASADO, SOLTERO). Hay solamente tres valores posibles por lo tanto un indice bitmap seria apropiado para esta columna. Sin embargo, no es recomendable un indice bitmap para la columna CLIENTE o APELLIDO, dada su alta cardinalidad.

La representación interna sería la siguiente:

CASADO SOLTERO DIVORCIADO
1                   0                    0
0                   1                    0
0                   0                    1
1                   0                    1

Un indice bitmap puede resolver esta sentencia con gran eficiencia contando la cantidad de unos existentes en el mapa de bits resultante como se muestra en la siguiente figura

select count(*) from CLIENTES
    where ESTADO_CIVIL in ('SOLTERO','DIVORCIADO');



jueves, 2 de octubre de 2014

Conectarse a una instancia de un cluster SQL Server


Buenas a todos,



El otro día nos pusieron un cluster SQL Server 2012 con 2 nodos. Los cluster SQL Server son útiles para ofrecer a las aplicaciones alta disponibilidad y si estas están preparadas escalabilidad en la capa de datos. Si el cluster está en una misma máquina no es posible que cada nodo escuche por el mismo puerto, por lo cual se suelen poner los SQL server a distintos puertos. Para conectarnos mediante SQL Management a cada uno de los nodos una forma es poner el [nombre de la máquina], [num del puerto] como en la imagen de abajo:





un saludo!

Funcion SQL para rellenar con caracteres a la inquierda


Buenos días

Mi primera entrada está dedicada a sql server. Sql Server es un servidor de Base de Datos y a traves de Sql Server Management Studio se pueden realizar la mayor parte de la gestión sobre el servidor.
El otro día se me presentó la dificultad de realizar una consulta sql sobre el servidor para una extracción de datos, la dificultad estribaba en que una de las columnas, la columna NIF necesitaba ser rellenada con 0 a la izquierda. Para rellenar con 0's o con cualquier otro caracter se puede usar la función Replicate


Un ejemplo de uso es el siguiente, donde relleno por delante con tantos 0's necesarios hasta completar un total de 12 caracteres


     select  REPLICATE('0', (12 - LEN(NIF)))  from personas


La salida resultante para un dni (ficticio) sería del tipo: 00054321012M

Espero que os sirva!