Mortuux

Diario de un estudiante geek. Informática, tecnología, programación, redes, sistemas operativos, bases de datos…

Archivos por Etiqueta: datos

Evitar los atributos en XML.

Algunos de los problemas de (ab)usar de los atributos en XML son:

  • Los atributos no pueden contener valores múltiples. (Los elementos sí)
  • Los atributos no pueden contener estructuras en árbol. (Los elementos sí)
  • Los atributos no se pueden extender fácilmente (para futuros cambios)

Los atributos son difíciles de leer y mantener. Para datos es mejor utilizar elementos. Usa atributos para información que no sea relevante para los datos.

dia=”10″ mes=”01″ anio=”2008″
para=”Marcos” de=”Adrian” asunto=”Recordatorio”
contenido=”No te olvides de mi cumpleaños eh :P”>
</nota>

El código anterior es complicado de leer, y ya que estamos no es para nada bonito. La forma más correcta sería:

<nota>

<fecha>

<dia>10</dia>

<mes>01</mes>

<anio>2008</anio>

</fecha>

<para>Marcos</para>

<de>Adrian</de>

<asunto>Recordatorio</asunto>

<contenido>No te olvides de mi cumpleaños eh:P</contenido>

</nota>

 

Un uso que podemos dar a los atributos en XML es para metadatos, es decir, datos sobre los datos. Por ejemplo:

<nota id=”200″>

<fecha>

<dia>10</dia>

<mes>01</mes>

<anio>2008</anio>

</fecha>

<para>Marcos</para>

<de>Adrian</de>

<asunto>Recordatorio</asunto>

<contenido>No te olvides de mi cumpleaños eh:P</contenido>

</nota>

Esta nota tiene un id “200”, y otra nota cualquiera tendrá otro id diferente, para así diferenciar las posibles notas que haya.

Drizzle. Fork de MySQL

Como bien indica el título Drizzle es un fork de MySQL, concretamente de la versión 6.0.

Desde entonces ha habido muchos cambios, como los siguientes:

Uso

  • No hay un servidor embebido. El servidor Drizzle no se puede cargar como librería compartida
  • Drizzle está optimizado para entornos concurrentes masivos
  • Diseñado para sistemas POSIX modernos
  • Windows, HP-UX e IRIX no son soportados
  • Drizzle no utiliza timezones. Todo es UTC

Instalación

  • No hay scripts/mysql_install_db o similar. Drizzle se basa en una instalación conocida como “just works” (simplemente funciona)
  • Drizzle puede escuchar en el puerto Drizzle (4427) y/o en el puerto MySQL (3306) y entender los respectivos protocolos

Procedimientos Almacenados

Drizzle actualmente no tiene ningún plugin que implemente procedimientos almacenados. La implementación en MySQL no era óptima

Comandos eliminados

  • ALTER TABLE UPGRADE
  • REPAIR TABLE
  • CREATE FUNCTION
  • CONVERT
  • SET NAMES
  • Borrado y actualizado multi-tabla

Funciones eliminadas

  • crypt()
  • bit_length()
  • bit_count()

Palabras clave eliminadas

  • CIPHER
  • CLIENTE
  • CODE
  • CONTRIBUTORS
  • CPU
  • DEFINER
  • DES_KEY_FILE
  • ENGINES
  • EVERY
  • IO
  • IPC
  • ISSUER

Objetos eliminados

  • No hay requerimiento de un schema mysql
  • No hay SET datatype, hay que usar ENUM
  • No hay comando SET NAMES, UTF-8 por defecto
  • No hay CHARACTER o CHARACTER SET, todo está por defecto en UTF-8
  • No hay TIME, DATETIME o INT
  • No hay TINYINT, SMALLINT o MEDIUMINT. Las operaciones de enteros han sido optimizadas para 32 y 64 bits
  • No hay TINYBLOB, MEDIUMBLOB o LONGBLOB. Hay un BLOB optimizado
  • No hay TINYTEXT, MEDIUMTEXT o LONGTEXT. Usar TEXT o BLOB
  • No hay UNSIGNED
  • No hay tipos de datos espaciales (GEOMETRY, POINT, LINESTRING, POLYGON)

 

Hay bastantes más cambios, pero con estos nos hacemos una idea de más o menos lo que ha cambiado en este nuevo fork que acaba de publicar su primera versión estable.

 

Podéis ver la lista de cambios completos aquí (inglés): Drizzle differences

 

Estadísticas del consumo de datos de una interfaz de red.

Debo admitir que soy un gran fan de las estadísticas, así que me gusta también tener controlado el tráfico web de mis descargas.

En Windows utilizo Jc Net Meter, y en linux vnstat

Para instalar vnstat hacemos lo siguiente:

# apt-get install vnstat

Y una vez tengamos datos suficientes, bastará con escribir ‘vnstat’ en la terminal para que nos muestre la cantidad de GB descargados y que nos haga una estimación.

Túnel para el tráfico web. Proxy socks

A través de un compañero de clase, descubrí esta forma de tunelizar nuestro tráfico web de una red insegura. Este túnel encripta cualquier dato, por lo que estaría fuera del alcance de cualquier sniffer también.

Necesitaremos dos máquinas: Una será el servidor SSH que hará el forwarding de puertos, y otro será la máquina que creará el túnel hacia el servidor

En el servidor debe estar instalado openssh.

# apt-get install openssh

En el servidor, editamos el archivo /etc/ssh/sshd_config y al final añadimos las siguientes líneas:

AllowTcpForwarding yes

GatewayPorts yes

Y guardamos el archivo.

Ahora tenemos activado el forwarding de puertos en el servidor.

Ahora en la máquina que creará el túnel y en la cuál queremos que el tráfico sea seguro, hacemos lo siguiente

 

ssh -N -p PORT user@sshserver -D 2080 -v

 

 

Donde:
  • – N -> Impide que se ejecuten comandos
  • -p -> Indica el puerto SSH a usar en caso que no sea el 22
  • -D -> Indica un puerto dinámico. He puesto 2080 sin ningún motivo en especial
  • -v -> Verbose mode.
Y ahora en Mozilla Firefox, establecemos el proxy socks v5 a “localhost” y el puerto “2080”
Y con eso tendríamos nuestro tráfico web protegido.

 

 

Bases de datos relacionales.



  1. Bases de datos relacionales

    Objetivos y ventajas del modelo relacional

El principal objetivo del modelo relacional es traducir el modelo de negocio (realidad) para que el modelo de base de datos sea lo más parecido posible.

Abstracción del almacenamiento físico

Separación entre el nivel de almacenamiento físico y el nivel conceptual

Utilizando bases de datos relacionales, el depósito de información es compacto, está gestionado de forma transparente. Todas las entidades residen en mismo depósito de información.

Relaciones reflexivas y recursividad

Permite relaciones reflexivas.

Una entidad puede relacionarse consigo misma, lo cual nos lleva pensar en esquemas recursivos.

Abstracción de tablas y vistas

Podemos tener entidades almacenadas en tablas (filas y columnas) y también podemos componer vistas empleando los contenidos de diferentes tablas.

Relaciones y reglas de integridad referencial

Son las líneas que vinculan unas entidades con otras.

Las reglas de integridad referencial se generan a partir de relaciones entre tablas.

Dependiendo de si el campo es clave en origen o en destino podemos tener relaciones fuertes o débiles. Las relaciones fuertes implican reglas de integridad referencial.

Las reglas de integridad referencial sirven para exigir coherencia entre los datos.

Relaciones fuertes y relaciones débiles. Cardinalidad.

Hay varios tipos de relaciones, pueden ser 1 a N o N a M.

Si la relación es NM, se debe crear una tabla de cruce con los campos clave de ambas tablas

Relación fuerte: Porque se trata de una relación de uno a muchos. El hecho de que exista un sello implica que debe estar guardado en un álbum.

Procedimientos almacenados y disparadores (triggers)

Los procedimientos almacenados son funciones y métodos que amplían las posibilidades de manejo de la base de datos.

Estos procedimientos constituyen una capa de programación intermedia muy cercana a la base de datos.

Ejemplos de tareas:

Dar de alta entidades. Una empresa tiene como norma que un cliente nunca pueda darse de alta si no se le ha realizado un análisis de riesgo de cobro. El procedimiento de alta de un cliente verificará que el valor de la columna Riesgo no sea nulo.

Distribuir datos lógicos a lo largo de diferentes tablas físicas sin que externamente se modifique nada.

Obtener datos de hardware o controlar dispositivos externos.

 

Los disparadores o triggers son procedimientos almacenados que se ponen en marcha automáticamente cuando sucede un acontecimiento previsto. Por ejemplo, la inserción de un nuevo registro sobre una tabla.

Más ejemplos:

Llamar a los técnicos de control cuando se ha insertado un registro en la tabla de incidencias de maquinaria

Para enviar un mensaje de correo electrónico a un cliente cuando su mercancía está lista para salir de almacén

Transacciones

Una transacción es un bloque diferenciado de operaciones de escritura sobre una o más tablas, cuyo resultado puede ser confirmado o revocado en su totalidad.

La inserción de una factura implica a su vez la inserción de una cabecera de factura y de unas líneas de factura.

Imaginemos que intentan entrar una línea de factura con una cantidad 0 de unidades o que estamos trabajando con albaranes/factura y las unidades facturadas superan las unidades que tenemos en stock para entregar.

Lo que sucede en este caso es que se revoca la escritura de la cabecera, de las líneas anteriormente grabadas de esa factura y se retorna al estado anterior.

Debe respetar las condiciones ACID.

  • A de atomización: la palabra átomo quiere decir indivisible. Una factura es una entidad lógica indivisible, por ejemplo.
  • C de consistencia: se garantiza que sólo se realizará el bloque si no se rompe ninguna regla de integridad referencial ni ninguna regla de negocio explícitamente guardada en la base de datos.
  • I de Isolation: una operación no puede afectar a otras. Dos transacciones sobre la misma información son independientes y no generan errores.
  • D de durabilidad: una vez que la transacción se ha confirmado, se mantiene en disco completamente grabada aunque haya un fallo de sistema

    Seguridad

Pueden establecer normas de seguridad para proporcionar acceso de lectura, escritura, inserción y borrado de sus usuarios, así como establecer seguridad también sobre los derechos de administración, como por ejemplo creación y destrucción de tablas.

En programación orientada a objetos, una tabla equivale a una entidad o un tipo de objeto: una clase. La seguridad es a nivel de tipos, y no de registro.

Existe una segunda forma de seguridad que no está implementada en las bases de datos relacionales que es la seguridad a nivel de instancias; la seguridad a nivel de filas individuales de las tablas.

Lenguajes propias para la gestión de datos y recursos

Lenguaje unificado. Se trata del lenguaje SQL del cual han surgido variaciones y dialectos propias de cada fabricante:

  • DDL (Data Definition Language): Lenguaje de definición de estructuras de datos. Permite crear tablas, modificarlas y eliminarlas
  • DML (Data Management Language): Lenguaje de manipulación de datos. Permite dar de alta filas, modificar contenido de columnas y borrar filas y columnas
  • DCL (Data Control Language): Lenguaje de control de datos. Permite administrar la seguridad de quién puede leer, escribir o borrar datos en una tabla; quién puede crear o eliminar tablas, etc.

 

Diseño de bases de datos

1. Diseño de bases de datos

1.1. Modelo de datos
Un modelo de datos es un conjunto de conceptos, reglas y convenciones que nos permiten describir los datos, las relaciones entre los datos, las restricciones del mundo real y que nos permite manipular dichos datos.
Formalmente un modelo de datos sería MD = (R, O),
Las Reglas serían la parte estática del modelo y las Operaciones la parte dinámica
1.1.1. Parte estática
Está compuesta de dos cosas: objetos y restricciones
Objetos:
Entidades: Objeto abstracto o concreto del mundo real con existencia propia y fácilmente identificable (persona, lugar, suceso, etc.)
Propiedades o atributos de las entidades: Mínimo elemento lógico de información que se puede encontrar en una entidad o relación entre entidades.
Dominio: Rango de valores de cada atributo (nombre->alfanumérico, cumpleaños-> fecha)
Relación o asociación entre entidades: Por ejemplo un grupo de alumnos se relaciona con un aula.

1.1.2. Tipos de restricciones
Las impuestas por el usuario las impone el mundo real (Por ejemplo que los nº de teléfono tengan X números).
Inherente al modelo: El modelo de dato no nos permite determinados objetos ni relaciones entre objetos.

DDL: Lenguaje de definición de datos
Son órdenes que permiten describir la parte estática del modelo de datos.

1.1.3. Parte dinámica
Dinámica de un modelo de datos.
Está compuesto por un conjunto de operaciones que se definen sobre la estática del modelo y que se van a aplicar sobre los datos almacenados y que se denominan ocurrencias.
Las operaciones pueden ser:
Selección: Consiste seleccionar o localizar una o más ocurrencias, por ejemplo de la entidad alumno localizar ocurrencia mayor 20 años
Acción: Operaciones que se realizan sobre ocurrencias previamente seleccionadas, por ejemplo mirar, modificar, ver, insertar.

El lenguaje DML -> Lenguaje para la manipulación de datos
1.2. Pasos en el diseño de una base de datos
1.2.1. Nivel conceptual
Consiste en analizar el mundo real para describir las entidades, atributos y dominios y las relaciones entre entidades.
Este modelo es totalmente independiente de cualquier sistema gestor de base de datos (SGBD) El esquema conceptual es el modelo entidad-relación (E/R)
1.2.2. Nivel lógico
Se realiza la adaptación del esquema conceptual al tipo de SGBD que vayamos a utilizar.
1.2.3. Nivel físico
Se implementa el esquema relacional en el SGBD concreto (Access, Oracle, MySQL).

1.3. Modelo conceptual Entidad/Relación (E/R)
Restricciones Entidad: Debe tener existencia propia, puede llevar asociado un predicado que deben cumplir todas las ocurrencias, cada ocurrencia de la entidad debe poder distinguirse de las demás, todas las ocurrencias de la entidad deben tener los mismos atributos. Representación cuadrado con nombre de entidad.
Restricciones atributo: Cada atributo debe tener un significado único y consistente, no es necesario especificar los atributos que se obtienen mediante cálculos. Representación —–O nombre. Si el redondel está en negrita, es el atributo principal (clave: identifica de forma única cada ocurrencia de la entidad. Puede haber atributos alternativos y atributos compuestos también. Por ejemplo Empleado->Clave: Nif… alternativo: nº SS… Fecha nacimiento ->Día, mes, año: Compuesto

1.4. Relaciones
La relación se representa con un rombo.
• Nombre: Suele ser un verbo.
• Grado: Número de entidades que asocia
o Una entidad ( Persona – casa )
o Binaria: Dos entidades (Profesor – imparte – Grupo)
o Ternaria: Tres entidades ( Cliente – Hotel – Vuelo – contrata)
Tipo de correspondencia: Expresa el número de ocurrencias de la entidad que pueden relacionarse con una ocurrencia de la otra entidad.
Un profesor puede impartir a N grupos
1 profesor – N grupos
N Grupos – 1 grupos NM
1 persona casada con una persona -> 1 – 1
Cliente realiza pedido
Cliente N pedidos
Pedidos 1 cliente -> 1 N

Cardinalidad se expresa cómo (mínimo, máximo)
Un profesor como mínimo imparte 1 grupo, máximo N.
Un grupo es impartido como mínimo por 1, maximo N.
Una persona se casa como minimo con 0, como máximo con 1.
Cliente realiza como mínimo 1 como máximo N. un pedido como mínimo 1 como maximo por 1