Normalización y Formas Normales (FN)

Introducción a las formas normales


Cuando diseñamos un esquema de base de datos relacional, el objetivo, es llegar a una representación correcta de los datos, de las relaciones existentes entre ellos y de las restricciones que se presenten. 

En 1972 Codd definió la Normalización como la técnica que nos permite conseguir relaciones que cumplan en gran medida con lo siguiente: 
  • producir un número mínimo de redundancias e incoherencias
  • evitar problemas de actualización
  • posibilitar la recuperación de datos

En muchos casos cuando realizamos un buen Modelo Entidad Relación,  si hemos identificado correctamente las relaciones que se dan entre las entidades, y la transformación al Modelo Relaciónal también se ha realizado de forma correcta, estaremos probablemente ante un esquema que cumple con las recomendaciones de Codd, es decir, ante una base de datos normalizada.

Pero esto no siempre es así y por ello, la Normalización define una serie de reglas, denominadas Formas Normales y que permiten ir remodelando la base de datos a través del análisis de claves primarias y las dependencias que se producen entre los atributos.


¿Qué Formas Normales existen?


Codd definió 3 que son las más básica y habituales, pero posteriormente, el  y otros analistas han ido llevando las relaciones a un grado más exigente definiendo nueva formas.

  • 1 ª, 2ª, 3ª Forma Normal (Codd, 1070/1971) 
  • BNFC (R.F. Boyce y Codd, 1974) 
  • 4ª y 5ª Forma Normal creadas por Fagin en 1977/1979
  • 6ª Forma Normal (2002)

Proceso de normalización de la base de datos


Para llevar a cabo la normalización comenzaremos comprobando si se cumple la 1ª FN, una vez que se cumpla, comprobamos si se cumple la 2ª FN, y así sucesivamente. Una base de datos, que está es 2ª FN, lo está también en primera, así mismo, si está en 3ª implicaría que está también en 2ª FN, es decir, las formas normales son incrementales.
 


 
 




Writer - Como crear un índice de contenido

Cuando trabajamos con documentos grandes y/o profesionales puede surgir la necesidad de insertar un índice de contenido o alfabético que se irá actualizando a medida que el documento se va modificando.
Writer permite manejar distintos tipos de índices: índice de contenido, índice alfabético, índice de figuras, índice de tablas, definido por el usuario, índice de objetos, bibliografía.

Índice de contenido: facilita la estructura de contenidos del documento y el número de página en el que se localizan.


Insertar un índice


Los índices se generan a partir de los estilos aplicados a los distintos apartados en los que dividimos el texto. Una forma sencilla de hacerlo es utilizar un esquema de numeración o insertar las entradas de forma manual.

Configuración del Esquema de numeración


Haciendo uso de los estilos de párrafo podemos configurar los distintos niveles de numeración que necesitemos, utilizando números o letras (A,B, C, … - i, ii, iii, …). 
Por ejemplo, en la imagen utilizamos los estilos Encabezado 1, Encabezado 2 y Encabezado 3 para crear un esquema de 3 niveles.



Aplicar el estilo a los encabezados o apartados

Seleccionamos el estilo que queremos aplicar al párrafo en la barra de herramientas o en el menú Formato – Estilos y Formato (F11).


Insertar entradas de forma manual

Otra opción es insertar las entradas del índice de forma manual, seleccionando el texto  y configurando la entrada a través del menú Insertar – Insertar Índices y tablas – Entrada.

Insertar el índice de contenido

 Nos posicionamos en la página en la cual queremos insertar el índice.

Insertar – Índices y tablas – Índices – Pestaña Índice/tabla.
Título: nombre para el índice por el título por defecto se corresponde con el tipo de índice seleccionado.
Protegido contra cambios manuales: protege la tabla contra cambios accidentales, se deshabilita la escritura o modificación de forma manual.
Para: permite seleccionar entre Todo el documento o Capítulo.



Evaluar hasta el nivel: se definen los niveles que queremos que aparezcan en el índice, por ejemplo si hemos definido 10 niveles pero sólo queremos visualizar 6 en el índice indicaremos 6 en este apartado.
Esquema: aparecen la totalidad de niveles definidos en la opción Herramientas –Esquemas de numeración.
Estilos Adicionales: en el caso que queramos que en el índice aparezcan apartados adicionales a los definidos en el esquema de numeración,  se puede activar configurando esta opción.

Writer - Formato del carácter

Acceder a las opciones de formato del carácter


El formato del carácter hace referencia al tipo de letra que utilizamos, por ejemplo Arial, Verdana, ... así como a sus característica en cuanto a tamaño, color y otras opciones comunes como pueden ser negrita, subrayado o cursiva y algunas otras como es espacio entre las letras, la posición o rotación.

El tipo de letra por defecto en Libre Office es Liberation Serif.

Antes de ver que es cada característica y como la configuramos. Veremos distintos modos de acceder a estas configuraciones.


Desde la Barra de herramientas               

La primera opción es utilizar directamente los botones de comando que aparecen en la barra de herramientas, ahí encontramos las opciones relacionadas con el carácter y también algunas otras como la alineación. 
                                              

Desde el Menú Formato                                                                                          

Podemos acceder a través de la barra de menús en la opción Formato - Carácter













 Desde el Menú contextual

Podemos acceder al menú contextual haciendo clic con el botón derecho del ratón sobre el área de trabajo del documento.

En cualquier menú contextual encontraremos siempre las operaciones más comunes que se pueden realizar. 

Java - Lista de los acrónimos más importantes en Java

Cuando hablamos de Java realmente deberíamos de hablar de Tecnologías Java, ya que detrás de la programación en este lenguajes se aglutinan un muchas tecnologías dedicadas a satisfacer unas funcionalidades concretas.

En muchas ocasiones, la gente se confunde con tanto lío de siglas, por eso vamos a ver un listado de los principales acrónimos relacionados con Java. Ya adelanto que no están todos seguro, así que podemos irlo completando. Se aceptan contribuciones 😜.



API
Application Program Interface o Interfaz de Programación de Aplicación. Conjunto de especificaciones de comunicación entre componentes software. Representa un método para conseguir abstracción en la programación, generalmente entre los niveles o capas inferiores y los superiores del software.

Applet
Pequeña aplicación Java que puede ser incrustada en una página HTML.

CDIContexts and Dependency Injection. Mecanismo para resolver dependencias entre servicios dentro del estándar JEE, a partir de la versión 6.

EJB
Enterprise JavaBeans. Interface de programación desarrollada por la empresa Sun Microsystems que define una arquitectura de componentes para realizar sistemas cliente/servidor multicapa.

J2EE
Java 2 Enterprise Edition. Nombre de la antigua plataforma Java para el desarrollo de servicios web.

JEE
Java Enterprise Edition. Plataforma Java orientada al desarrollo de servicios web y aplicaciones distribuidas mediante EJB's y tecnologías relacionadas, con API para la gestión de transacciones, persistencia de objetos, servicios de nombres, XML, autenticación, etc.

JME
Java Micro Edition. Es una tecnología que permite la creación de aplicaciones que reciban y envíen datos a través de redes inalámbricas. Está orientado a dispositivos con menos potencia y menor capacidad gráfica que los ordenadores personales.

JSE
Java Standard Edition. Plataforma Java que abarca las API orientadas a la programación de aplicaciones de usuario final: interfaz gráfica de usuario, multimedia, etc.

JCP
Java Community Process. Comunidad de desarrollo de especificaciones de tecnologías Java.

JDC
Java Database Connectivity. API que permite la ejecución de operaciones sobre bases de datos desde el lenguaje de programación Java independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se accede
utilizando SQL.

JDO
Java Data Objects. Interfaz Java para la persistencia de objetos.               

JMS
Java Message Service. Interfaz Java para la comunicación de mensajes.

JNDI
Java Naming and Directory Interface. Interfaz para el acceso a los sistemas de nombres de directorios.

JPA
Java Persistence API. Abstracción del driver de Java para bases de datos que permite relacionar la orientación a objetos de Java con el sistema relacional de la base de datos, realizando la conversión entre los objetos y las tablas.

JPQL
Java Persistence Query Language. Lenguaje de consultas a base de datos basado en Java y SQL.

JSP
Java Server Pages. Tecnología para generar páginas web de forma dinámica en el servidor, desarrollado por Sun Microsystems, basado en scripts que utilizan una variante del lenguaje Java.

JSF
Java Server Faces. Es una tecnología y framework para aplicaciones Java basadas en web que simplifica el desarrollo de interfaces de usuario en aplicaciones Java EE.

JSR
Java Specification Requests. Documentos formales que describen las especificaciones y tecnologías propuestas para que sean añadidas a la plataforma Java.xto

JTA
Java Transaction API. Interfaces Java para la gestión de transacciones y las partes involucradas en el sistema de transacciones distribuidas: el servidor de aplicaciones, el manejador de recursos y las aplicaciones transaccionales.

JVM
Java Virtual Machine o Máquina Virtual de Java.                                               

POJO
Plain Old Java Objects. Clase estándar de Java que define atributos y ofrece métodos de modificación y consulta para cada

Servlet
Objeto que corre dentro del contexto de un servidor web y extienden su funcionalidad.

SPI
Service Provider Interface. Funcionalidad de JNDI que proporciona acceso al servicio de directorio específico de cada fabricante.

Ocultación en Internet - La red Tor

En la página del proyecto Tor podemos encontrar información sobre Tor, sus usuarios y otros proyectos relacionados.

En el apartado Download o en el siguiente enlace, podemos acceder a descargar el software en distintos idiomas para los sistemas operativos Windows, Linux y Mac.

https://www.torproject.org/projects/torbrowser.html.en

A día de hoy la última versión estable es la 9.0.9.

Descarga de Tor Browser



Java - Eliminar espacios en blanco a la izquierda o derecha

En ocasiones, trabajando con textos, necesitamos eliminar los espacios en blanco innecesarios, pero sólo a la izquierda o a la derecha, es decir los del inicio del texto o los del final.

Como comentamos antes, el método trim permite eliminar  ambos, pero no sólo los del inicio o los del final. Otros lenguajes como PHP poseen las funciones ltrim (left trim) y rtrim (right trim).


  • ltrim: elimina sólo los espacios en blanco en un String al comienzo de la cadena, por la izquierda.
  • rtrim: elimina sólo los espacios en blanco en un String al final de la cadena, por la derecha.

En Java no disponemos de estos métodos, se considera que habitualmente queremos limpiar ambos lados y haremos uso de trim.


¿Cómo podemos simular rtrim y ltrim?


Tenemos varias opciones pero entre ellas os presento dos posibilidades:


  • La primera se basa en recorrer la cadena empezando por el principio o por el final y eliminar los caracteres que se correspondan un un espacio en blanco.
  • La segunda es el uso de patrones de expresiones regulares. 


Opción 1  Sencillo pero útil

Creamos un método ltrim que recibe como parámetro la cadena de caracteres original, recorremos la cadena buscando el primer carácter que no es un espacio en blanco, cuando lo encontramos haciendo uso del método substring (que devuelve una subcadena) retornamos los caracteres desde el indicado hasta el final.


public static String ltrim(String s){
    
                
        for (int i=0; i<s.length(); i++) {
            
           if (s.charAt(i)!= ' ') {
              return s.substring(i);
            }
                    
        }
      
        return "";
    }

Haciendo uso del mismo razonamiento creamos rtrim que recibe como parámetro la cadena de caracteres original, la recorre en este caso desde el final buscando el primer carácter que no es un espacio en blanco.

public static String rtrim_for(String s){
        
        
        for (int i=s.length()-1; i>=0; i--){
            
            if (s.charAt(i)!= ' ')
             return s.substring(0, i+1); 
   
        }
            
        return "";
    }


Opción 2  Necesitamos conocer el uso de expresiones regulares

Aplicando el uso de patrones, es tan simple como utilizar el método replaceAll con una expresión, para que sustituya los espacios en blanco al principio o al final por las comillas vacías "".

String sinEspaciosIzquierda = s.replaceAll("^\\s+", "");

String sinEspaciosDerecha = s.replaceAll("\\s+$","");

⸎  ¿Qué representa cada carácter dentro del patrón?
\s - espacio en blanco 
+ - uno o más caracteres
^ - inicio de la cadena
$ - fin de la cadena