Base de Datos con Apache Derby

base de datos con apache derby

Apache Derby es un gestor de base de datos relacional escrito en Java que puede ser empotrado en aplicaciones Java y utilizado para procesos de transacciones online. Apache Derby es un proyecto open source licenciado bajo la Apache 2.0 License.

  • Programado en: Java
  • Sistema operativo: Multiplataforma
  • La sintaxis SQL usada proviene de IBM DB2.
  • Posee SQL SCHEMAS para separar la información en una única base de datos y control completo de usuarios

Historia de Apache Derby

  • Apache Derby tiene su origen en la empresa Cloudscape Inc, en Oakland, California que se fundó en 1996. La primera versión del motor de base de datos, que por entonces se llamó JBMS, en 1997. Posteriormente el producto fue renombrado como Cloudscape.
  • En 1999 Informix Software, Inc, adquirió Cloudscape. En 2001 IBM adquirió los activos de Informix Software, incluyendo Cloudscape.
  • En agosto de 2004 IBM cedió el código a la Apache Software Foundation para Derby.
  • Derby es fácil de instalar, implementar y utilizar.

Ventajas de Apache Derby

  • Derby se basa en los Java y SQL.
  • Posee una opción, donde el ingreso a la base de datos, solo es posible a personas que estén autorizados por el creador de la misma.
  • Derby ofrece un driver JDBC incorporado que permite incrustar en cualquier solución basada en Java
  • Está disponible en la web para su descarga gratuita.
  • Cuenta una plataforma independiente, por lo cual es posible mover su base de datos a cualquier ordenador sin tener que modificar ningún tipo de datos de la misma.
  • Permite la creación de ficheros JAR, esto hace referencia a archivos comprimidos generador en el lenguaje de programación Java.

Desventajas de Apache Derby

  • Derby es fácil de instalar, implementar y utilizar.
  • Derby se basa en los Java y SQL.
  • Posee una opción, donde el ingreso a la base de datos, solo es posible a personas que estén autorizados por el creador de la misma.
  • Derby ofrece un driver JDBC incorporado que permite incrustar en cualquier solución basada en Java
  • Está disponible en la web para su descarga gratuita.
  • Cuenta una plataforma independiente, por lo cual es posible mover su base de datos a cualquier ordenador sin tener que modificar ningún tipo de datos de la misma.
  • Permite la creación de ficheros JAR, esto hace referencia a archivos comprimidos generador en el lenguaje de programación Java.
  • No tiene bindings para otros lenguajes* como consecuencia que las personas que no posean aplicaciones compatibles con java no podrán utilizar este gestor de base de datos.
  • Derby hace uso de una mayor cantidad de memoria y su rendimiento y compatibilidad SQL puede considerarse inferior que otras alternativas

*Un binding es una adaptación de una biblioteca para ser usada en un lenguaje de programación distinto de aquél en el que ha sido escrita.

Ejemplo de Apache Derby

Primero creamos la base de datos

CREATE TABLE departamentos (  
	dept_no  INT NOT NULL PRIMARY KEY, //no permite introducir el tamaño del INT
	dnombre  VARCHAR(15),
	loc VARCHAR(15) );
 
INSERT INTO departamentos VALUES (10,'CONTABILIDAD','SEVILLA');
INSERT INTO departamentos VALUES (20,'INVESTIGACIÓN','MADRID');
INSERT INTO departamentos VALUES (30,'VENTAS','BARCELONA');	//no acepta el commit;
INSERT INTO departamentos VALUES (40,'PRODUCCIÓN','BILBAO');
 
 
CREATE TABLE empleados ( 
	emp_no    INT NOT NULL PRIMARY KEY,
	apellido  VARCHAR(10),  
	oficio    VARCHAR(10),  
	dir       SMALLINT,  
	fecha_alt DATE,
	salario   FLOAT,		//en el FLOAT hay que quitarle los parentesis con sus valores
	comision  FLOAT,
	dept_no   INT NOT NULL REFERENCES departamentos(dept_no) );
 
INSERT INTO empleados VALUES (7369,'SÁNCHEZ','EMPLEADO',7902,'1990-12-17', 1040,NULL,20); 
INSERT INTO empleados VALUES (7499,'ARROYO','VENDEDOR',7698,'1990-02-20',1500,390,30); 
INSERT INTO empleados VALUES (7521,'SALA','VENDEDOR',7698,'1991-02-22',1625,650,30); 
INSERT INTO empleados VALUES (7566,'JIMÉNEZ','DIRECTOR',7839,'1991-04-02',2900,NULL,20); 
INSERT INTO empleados VALUES (7654,'MARTÍN','VENDEDOR',7698,'1991-09-29',1600,1020,30); 
INSERT INTO empleados VALUES (7698,'NEGRO','DIRECTOR',7839,'1991-05-01',3005,NULL,30); 
INSERT INTO empleados VALUES (7782,'CEREZO','DIRECTOR',7839,'1991-06-09',2885,NULL,10); 
INSERT INTO empleados VALUES (7788,'GIL','ANALISTA',7566,'1991-11-09',3000,NULL,20); 
INSERT INTO empleados VALUES (7839,'REY','PRESIDENTE',NULL,'1991-11-17',4100,NULL,10); 
INSERT INTO empleados VALUES (7844,'TOVAR','VENDEDOR',7698,'1991-09-08',1350,0,30); 
INSERT INTO empleados VALUES (7876,'ALONSO','EMPLEADO',7788,'1991-09-23',1430,NULL,20); 
INSERT INTO empleados VALUES (7900,'JIMENO','EMPLEADO',7698,'1991-12-03',1335,NULL,30); 
INSERT INTO empleados VALUES (7902,'FERNÁNDEZ','ANALISTA',7566,'1991-12-03',3000,NULL,20); 
INSERT INTO empleados VALUES (7934,'MUÑOZ','EMPLEADO',7782,'1992-01-23',1690,NULL,10);

2- Hacemos la consulta a la base de datos Creada

import java.SQL.Connection;
import java.SQL.DATE;
import java.SQL.DriverManager;
import java.SQL.ResultSet;
import java.SQL.SQLException;
import java.SQL.Statement;
 
public class SelectE {
 
    public static void main( String[] args )
    {
        String url = "jdbc:derby://localhost/prueba";
        String USER = "adolfo";
        String password ="1234";
 
        try( Connection conn = DriverManager.getConnection( url, USER, password ) ) {
            Statement stmt = conn.createStatement();
            String query = "SELECT * FROM empleados";
            ResultSet rs = stmt.executeQuery( query );
 
 
            while( rs.NEXT() ) {
                INT no = rs.getInt( "emp_no" );
                String apel = rs.getString( "apellido" );
                String oficio = rs.getString( "oficio" );
                INT dir=rs.getInt("dir");
                DATE fec=rs.getDate("fecha_alt");
                DOUBLE sal=rs.getDouble("salario");
                DOUBLE com=rs.getDouble("comision");
                INT dep=rs.getInt("dept_no");
                System.OUT.println(no+" - "+apel+" - "+oficio+" - "+dir+" - "+fec+""
                        + " - "+sal+" - "+com+" - "+dep);
            }
 
                    rs.close();// Cerrar ResultSet
		   stmt.close();// Cerrar Statement
  		 conn.close();//Cerrar conexion
 
        }
        catch( SQLException ex ) {
            System.OUT.println("error de base de datos"+ ex);
        }
    }
}

Hacemos la segunda consulta a la base de datos

import java.SQL.Connection;
import java.SQL.DriverManager;
import java.SQL.ResultSet;
import java.SQL.SQLException;
import java.SQL.Statement;
import java.util.logging.Level;
 
public class SelectD
{
    public static void main( String[] args )
    {
        String url = "jdbc:derby://localhost/prueba";
        String USER = "adolfo";
        String password ="1234";
 
        try( Connection conn = DriverManager.getConnection( url, USER, password ) ) {
            Statement stmt = conn.createStatement();
            String query = "SELECT * FROM departamentos";
            ResultSet rs = stmt.executeQuery( query );
 
 
            while( rs.NEXT() ) {
                INT DEPT_NO = rs.getInt( "dept_no" );
                String DNOMBRE = rs.getString( "dnombre" );
                String LOC = rs.getString( "loc" );
                System.OUT.println(DEPT_NO+" "+DNOMBRE+" "+LOC);
            }
 
                    rs.close();// Cerrar ResultSet
		   stmt.close();// Cerrar Statement
  		 conn.close();//Cerrar conexion
 
        }
        catch( SQLException ex ) {
            System.OUT.println("error de base de datos"+ ex);
        }
    }
}

Señales Digitales y Analógicas | Conceptos Varios

ANCHO DE BANDA

Es el ancho del espectro de frecuencia. Se refiere al rango de las frecuencias componentes y el espectro de frecuencia relacionado con los elementos dentro de ese rango. Para calcularlo hay que sustraer la frecuencia más baja de la frecuencia más alta del rango.

CONVERSIÓN DIGITAL A DIGITAL

Es la representación de la información digital mediante una señal digital. En este tipo de codificación, los unos y ceros binarios generados por una computadora se traducen a una secuencia de pulsos de voltaje que se pueden propagar por un cable.

CODIFICACIÓN MANCHESTER

Usa la inversión de cada intervalo de bit para sincronizar y para representar bits. Una transición a positivo representa un 1 binario y una transición a negativo representa un 0 binario. Usando una transición con ese doble objetivo, la codificación Manchester logra el mismo nivel de sincronización que RZ pero con dos valores de amplitud.

CONVERSIÓN DE ANALÓGICO A DIGITAL

Es necesario efectuar una reducción del número de valores de forma que puedan ser representados como un flujo digital con una pérdida mínima de información. Se representa la información contenida en una onda continua como una serie de pulsos digitales (unos o ceros). El problema es cómo trasladar la información desde un número infinito de valores a un número discreto de valores sin perder sentido o calidad.

CONVERSIÓN DE DIGITAL A ANALÓGICO

Es el proceso de cambiar una de las características de una señal de base analógica en información basada en señal digital(ceros y unos). Existen al menos tres mecanismos para modular datos digitales en señales analógicas: Modulación de amplitud(ASK), Modulación por desplazamiento de frecuencia(FSK) y Modulación por desplazamiento de fase (PSK). Además, hay un cuarto elemento que se denomina modulación de amplitud en cuadratura (QAM).
Dos términos que se usan frecuentemente en la transmisión de datos son la tasa de bits y la tasa de baudios. La tasa de bits es el número de bits transmitidos durante un segundo. La tasa de baudios indica el número de unidades de señal por segundo necesarias para representar esos bits.

ASK: es altamente susceptible a la interferencia por ruidos(voltajes no intencionados introducidos dentro de una línea por fenómenos variados tales como el calor o la inducción electromagnética creada por otras fuentes). Con ASK se obtiene un espectro de muchas frecuencias simples.

FSK: cambia entre dos frecuencias portadoras, aunque es fácil analizar como dos frecuencias coexistentes. Su espectro es la combinación de dos espectros ASK. El ancho de banda necesario es igual a la tasa de baudios de la señal más el desplazamiento de frecuencia.

PSK: la fase de la portadora cambia para representar el 1 o el 0 binario. Tanto la amplitud de pico como la frecuencia permanecen constantes mientras la dase cambia. El ancho de banda mínimo necesario es el mismo que para ASK, y por las mismas razones.

QAM: debido a los cambios de amplitud son susceptibles al ruido y requieren diferencias en el desplazamiento de lo que necesitan los cambios en fase, el número de desplazamientos en fase usados es siempre mayor que el numero de desplazamiento en amplitud.

CONVERSIÓN DE ANALÓGICO A ANALÓGICO

Es la representación de información analógica mediante una señal analógica. Se puede conseguir de tres formas: modulación de amplitud(AM), modulación de frecuencia (FM) u modulación de fase (PM).

AM: la señal portadora se modula de forma que su amplitud varíe con los cambios de amplitud de la señal modulada. La frecuencia y la fase de la portadora son siempre las mismas, solamente la amplitud cambia para seguir las variaciones en la información.

FM: se modula la frecuencia de la señal portadora para seguir los cambios en los niveles de voltaje(amplitud) de la señal modulada. La amplitud pico y la fase de la señal portadora permanecen constantes, pero a medida que la amplitud de la señal de la información cambia, la frecuencia portadora cambia de forma correspondiente.

PM: se usa en algunos sistemas como alternativa a la modulación en frecuencia. La fase de la señal portadora se modula para seguir los cambios de voltaje de la señal modulada. La amplitud pico y la frecuencia de la señal portadora permanecen constantes, pero a medida que la señal de información cambia, la fase de la portadora cambia de forma correspondiente.

DETERIORO DE LA TRANSMISIÓN

Los medios de transmisión no son perfectos. Las imperfecciones pueden causar deterioros en las señales que se envían a través de los medio. Habitualmente se producen tres tipos de deterioro: atenuación, distorsión y ruido.

Atenuación: significa pérdida de energía. Cuando una señal viaja a través de un medio, pierde algo de su energía para vencer la resistencia del medio. Esta es la razón por la cual los cables que llevan señales eléctricas se calientan después de un cierto tiempo. Para compensar esta pérdida, se usan amplificadores para amplificar la señal.

Distorsión: significa que la señal cambia de forma de onda. La distorsión ocurre en una señal compuesta, formada por distintas frecuencias. Cada señal componente tiene su propia velocidad de propagación a través del medio y, por tanto, su propio retraso en al llegada al destino final.

Ruido: hay varios tipos de ruidos(térmico, inducido, diafonía e impulsivos) que pueden corromper una señal. El ruido térmico se debe al movimiento aleatorio de electrones en un cable que crea una señal extra. El ruido inducido se debe a fuentes externas tales como motores y electrodomésticos que actúan como antenas emisoras y el medios de transmisión actúa como una antena receptora. La diafonía se debe al efecto de un cable sobre otro. Y el ruido impulsivo es un pico que procede de líneas de potencia, iluminación, etc.

MULTIPLEXACIÓN

Es el conjunto de técnicas que permite la transmisión simultánea de múltiples señales a través de un único enlace de datos. A medida que se incrementa el uso de los datos y las telecomunicaciones, se incrementa también el tráfico. Se puede hacer frente a este incremento añadiendo líneas individuales cada vez que se necesita un canal nuevo o se pueden instalar enlaces de más capacidad y usarlos para transportar múltiples señales.

FDM: La multiplexación por división de frecuencia es una técnica analógica que se puede aplicar cuando el ancho de banda de un enlace es mayor que los anchos de banda combinados de las señales a transmitir. Las señales generadas por cada dispositivo emisor se modulan usando distintas frecuencias portadoras.

TDM: La multiplexación por división del tiempo es un proceso digital que se puede aplicar cuando la capacidad de la tasa de datos de la transmisión es mayor que la tasa de datos necesaria requerida por los dispositivos emisores y receptores. En este caso, múltiples transmisiones pueden ocupar un único enlace subdividiéndole y entrelazando las porciones.
ADLS: La línea de abonado digital asimétrica (ADLS) es asimétrica, lo que significa que proporciona tasas de bits mayores en la dirección de entrada (desde la central telefónica a la casa del abonado) que en la dirección de salida (desde la casa del abonado a la central telefónica).
ADSL divide el ancho de banda en un cable de par trenzado en tres bandas. La primera, habitualmente entre 0 y 25 KHz, se usa para el servicio telefónico regular. La segunda banda, habitualmente entre 25 y 200 KHz, se usa para la comunicación de salida. La tercera banda, habitualmente entre 250 KHz y 1 MHz, se usa para comunicación de entrada. Algunas implementaciones solapan la banda de entrada y salida para proporcionar más ancho de banda en la dirección de entrada.

El Sistema Operativo

 

el sistema operativo

El sistema Operativo es el software que controla la asignación y el uso de recursos hardware, tales como la memoria, el tiempo de la unidad central de procesamiento (UCP), el espacio de disco y los dispositivos periféricos. El sistema operativo es el software de base del que dependen todas las aplicaciones. Ejemplos Windows XP, Windows Vista, Windows 7, Windows 2003, Windows 2008, Mac OS y UNIX.

El Sistema Operativo como administrador de recursos

Tareas de Administración y control

  • Cuándo puede utilizarse (disponibilidad)
  • Quién puede utilizarlo (qué proceso)
  • Oportunidad de uso (si es conveniente su uso)
  • Dimensión del recurso que debe asignarse (qué parte se asigna)
  • Inicialización del recurso
  • Coordinación del recurso con otros con los que está relacionado
  • (E/S y memoria)
  • Asignación y reparto de recursos entre los procesos que compiten
  • por tenerlo (procesador)

Modo de Transmisión símplex, semidúplex y Full-dúplex

modos de transmision

El término modo de transmisión se usa para definir la dirección del flujo de las señales entre dos dispositivos enlazados. Hay tres tipos: símplex, semidúplex y full-dúplex.

Símplex: la comunicación es unidireccional, solamente una de las dos estaciones puede transmitir, la otra solo puede recibir. Una vez configurado sólo admite en el sentido fijado (impresora).

Semidúplex:  Diálogo entre emisor y receptor. Cada estación puede tanto enviar como recibir, pero no al mismo tiempo(walkie-talkies).

Full-Dúplex: ambas estaciones pueden enviar y recibir simultáneamente, las señales comparten la capacidad del enlace. (red telefónica)

Topología de Red

Topologia de Red

TOPOLOGÍA: Se refiere a la forma en que está diseñada la red, bien físicamente o bien lógicamente. La tipología de una red es la representación geométrica de la relación entre todos los enlaces y los dispositivos que los enlazan entre sí (habitualmente denominado nodos).

Hay cinco posibles tipologías básicas:

  1. Malla
  2. Estrella
  3. Árbol
  4. Bus
  5. anillo

Malla: cada dispositivo tiene un enlace punto a punto y dedicado con cualquier otro dispositivo, dedicado significa que el enlace conduce el tráfico únicamente entre los dos dispositivos que conecta. Como ventajas podemos decir que cada conexión sólo debe transportar la carga de datos propia de los dispositivos conectados, es robusta, privacidad, seguridad. Como desventajas, la cantidad de cable y el número de puertos de E/S necesarios.

Estrella: cada dispositivo tiene un enlace punto a punto dedicado con el controlador central, habitualmente llamado concentrador. Es más barata que en malla, más fácil de instalar y reconfigurar. Se necesitan menos cables y si falla un enlace, solamente este enlace se verá afectado.
Sin embargo, cada nodo debe estar enlazado al nodo central, por lo que requiere más cable con respecto a árbol, anillo o bus.

Árbol: es una variante de la de estrella, los nodos del árbol están conectados a un concentrador central que controla el tráfico de la red. La mayoría de los dispositivos se conectan a un concentrador secundario que, a su vez se conecta al central. La inclusión de concentradores secundarios tiene dos ventajas. Permite que se conecten más dispositivos a un único concentrador central y puede, por tanto, incrementar la distancia que puede viajar la señal entre dos dispositivos. Permite a la red aislar y priorizar las comunicaciones de distintas computadoras. Su desventaja es similar a la de Estrella.

Bus: es multipunto, un cable largo actúa como una red troncal que conecta todos los dispositivos en la red. Los nodos se conectan al bus mediante cables de conexión y sondas. Un cable de conexión va desde el dispositivo al cable principal y una sonda es un conector que se conecta al cable principal o se pincha en el cable para crear un contacto con el núcleo metálico. Entre sus ventajas se incluye la sencillez de la instalación. El cable troncal puede tenderse por el camino más eficiente y, después, los nodos se pueden conectar al mismo mediante líneas de conexión de longitud variable. Entre sus desventajas se incluye lo dificultoso de su reconfiguración y del aislamiento de los fallos. Además, un fallo o rotura en el cable del bus interrumpe todas las retransmisiones, incluso entre dispositivos que están en la parte de la red que no falla.

Anillo: cada dispositivo tiene una línea de conexión dedicada y punto a punto solamente con los dos dispositivos que están a sus lados. La señal pasa a lo largo del anillo hasta que alcanza su destino. Es relativamente fácil de instalar y reconfigurar. Para añadir o quitar dispositivos, solamente hay que mover dos conexiones. Las únicas restricciones están relacionadas con aspectos del medio físico y el tráfico, aunque los fallos se pueden aislar de forma sencilla. En anillos sencillos, una rotura del anillo puede inhabilitar toda la red.

Examen Base Datos Desarrollo de Aplicaciones Multiplataforma

Desarrollo de aplicaciones Multiplataforma ies barajas

  1.  Define el término información.

 “Información” es un fenómeno que proporciona significado o sentido a las cosas. Indica, mediante códigos y conjunto de datos, los modelos del pensamiento humano. La información procesa y genera el conocimiento humano.

  1.  ¿Cuáles son las cualidades más importantes de la información?

La información, para ser útil, debe poseer una serie de cualidades, que son las siguientes:

 Precisión: es la cantidad de información correcta sobre un sistema total de información.

 Oportunidad: es el tiempo que ha pasado desde que se produjo el hecho que originó el dato hasta que la información se pone a disposición del usuario.

 Compleción, la información ha de ser completa para lograr su fin, es decir, el de informar.

 Significado: la información debe tener la máxima carga semántica posible, por lo que debe ser comprensible e interesante, con un volumen apropiado, ni insuficiente y excesivo.

 Coherencia, porque el sistema de información debe carecer de contradicciones. También denominado como integridad.

 Seguridad: la información debe protegerse para lograr que no se produzca un deterioro, al igual que evitar el acceso de individuos no deseados o autorizados. Comprende tres conceptos: confidencialidad, disponibilidad e integridad.

  1.  Enumera los principales componentes de un sistema de información.

Un sistema de información está compuesto por los siguientes componentes indispensables:

 Contenido. El conjunto de datos con su correspondiente descripción. Pueden ser referenciales, cuando están formados por referencias a documentos donde podemos encontrar la información sobre un tema, o factuales, que son los que contienen la dicha información. Éstos últimos pueden clasificarse en datos estructurados, cuando poseen una estructura definida, o no estructurados, cuando carecen de dicha estructura.

 Usuarios, o recursos humanos, diferenciados en aquellos encargados de crear y administrar los sistemas de información y en aquellos que acceden a la información.

 Componentes físicos, o hardware, que conforman la parte material del sistema de información.

 Componentes lógicos, o software,  que son los componentes no físicos necesarios para hacer posible

la realización de una tarea específica. En las bases de datos computacionales, se diferencian en Sistemas Operativos, Gestión de Datos (SGBD),  Control de Comunicaciones y tratamientos específicos .

 Administrador, el cual es responsable de implementar las decisiones del administrador de datos. Su trabajo consiste en crear la base de datos real o implementar los controles técnicos necesarios para hacer cumplir los requerimientos del administrador de datos. También se asegura de que el sistema funcione adecuadamente.

 Usuarios, clasificados en dos grupos.

 Informáticos: encargados de desarrollar los programas o aplicaciones de bases de datos en un lenguaje de programación, y aquellos responsables de implementar las decisiones del administrador de datos en la base de datos.

 No informáticos: aquellos usuarios que interactúan con las aplicaciones de bases de datos finales. Pueden tener, o no, conocimientos informáticos.

  1.  Define, diferenciándolos claramente, los conceptos de información factual e información referencial.

 Información factual son aquellos datos que contienen la información en sí misma, sin hacer alusión a otras informaciones sobre la materia. Pueden ser estructurados o no estructurados.

 Información referencial es todo dato que no contienen información por sí mismos, sino que contienen referencias a los documentos donde se encuentra la información que buscamos.

  1.  Pon ejemplos de datos no estructurados.

 Correspondencia, diarios, novelas, blogs…

  1.  ¿Qué ventajas y qué inconvenientes puede tener la separación de las descripciones lógica y física en una base de datos?

 Ventajas:   

 -Los cambios en la estructura lógica no implican cambios en la estructura de almacenamiento.

 -Las consideraciones sobre la manipulación óptima de los datos que hemos almacenado son administrados por el Sistema Manejador de Base de Datos.

 -Los cambios en la estructura de almacenamiento no implican cambios en los programas de base de datos, lo que da una mayor independencia lógico-física.

 Inconvenientes:  

 -Costes de instalación altos.

 -Requiere personal especializado.

 -Implantación difícil.

 -No es rentable a corto plazo.

 -Apenas existen estándares.

 -Teoría y práctica desfasadas entre sí.

  1. Exponga un conjunto de argumentos para convencer a un directivo de una empresa, no técnico en informática, de la conveniencia de que su empresa, que utiliza desde hace años un sistema de ficheros, cambie su enfoque hacia una base de datos (formule las hipótesis que desee sobre el tipo de aplicaciones de la empresa).

 Se puede ubicar la información en los lugares donde se necesitan con más frecuencia.

 Se permite a los usuarios no locales acceder a los datos, en función de sus necesidades.

 Mayor autonomía.

 Es necesario que los datos sean compartidos.

 El empleo de la información almacenada tiene que ser controlada, y para ello existe el sistema de gestión de bases de datos.

 Con una base de datos, eliminamos problemas de redundancia, ambigüedades en definición de datos, con consistencia interna entre ellos, gracias a que se integran de una forma lógica.

 Mayor eficiencia en la recogida, validación e introducción de los datos en el sistema de información, además de una mejor documentación de la información, debido a que se encuentra integrada en los mismos datos.

  1.  ¿Qué es una base de datos?

 Es un conjunto de datos pertenecientes a un mismo contexto o ámbito que son almacenados sistemáticamente para un uso posterior.

  1.  ¿Cuáles son las principales características de una base de datos?

 -Independencia lógica y física de los datos.

 -Mínima redundancia.

 -Integridad de los datos.

 -Permiten el acceso concurrente a los datos por parte de usuarios múltiples.

 -Seguridad.

 -Respaldo y recuperación de los datos.

 -Optimización de consultas complejas.

 -Permiten el acceso mediante lenguajes de programación.

  1.  Enumera algunas de las causas que pueden hacer que fracase un proyecto de creación de una base de datos.

 -Información deficiente e incompleta.

 -Demandas inesperadas.

 -Necesidades distintas a las iniciales.

 -Errores de hardware o software.

  1. ¿Cómo distinguirías entre los conceptos de base de datos, sistema de gestión de base de datos y sistema de base de datos?

 El sistema de gestión de base de datos es el conjunto de programas que permiten la implantación, acceso y mantenimiento de la base de datos.

 El sistema de base de datos está constituido por la base de datos, el sistema de gestión de base de datos y por los usuarios.

  1. ¿En cuál (o cuáles) niveles de abstracción de una base de datos está implicado un usuario final?

 En el nivel externo. Es la forma en el que el usuario aprecia la información y sus relaciones.

  1. ¿Qué relación existe entre el sistema de información y la base de datos?

 Una base de datos es un ejemplo de sistema de información.

  1. Explique la diferencia entre redundancia física y redundancia lógica, indicando cuál es perjudicial y porqué. Ponga un ejemplo.

 La redundancia física es la existencia del mismo dato repetido varias veces, duplicación de elementos físicos, la redundancia lógica es la existencia de la misma información dentro del mismo archivo especificada de formas distintas.

 En una base de datos se permite una mínima redundancia física, por motivos de eficiencia. Pero cualquier clase de redundancia lógica produce gran cantidad de errores en la base de datos debido a que se crean duplicidades innecesarias, que llevan a ocupar mayor cantidad de memoria, volviendo más lenta a la base de datos. por lo que deben ser evitadas.

Ejemplo: Tener una cuenta de cliente repetida dos veces en un listado de clientes (un ejemplo de base de datos) provoca muchos errores debido a la redundancia existente.

  1. ¿Qué otro término se puede utilizar para denominar la redundancia física?

Recibe el nombre de redundancia controlada.

  1. ¿La redundancia física implica siempre redundancia lógica? ¿Y viceversa?

 La redundancia física siempre implica redundancia lógica. Sin embargo, la redundancia lógica no tiene por qué provocar redundancia física.

  1. ¿Cuáles son los tres niveles de abstracción de una base de datos? Explícalos.

-Nivel conceptual: Consiste en estudiar las necesidades de los usuario y la definición de las clases de los datos. Tiene

como resultado un esquema conceptual con todos los elementos de los datos y sus relaciones.

-Nivel externo: Conformado por las vistas de los distintos grupos de usuarios sobre la base de datos, las cuales describen los elementos de los datos y sus relaciones.

-Nivel interno: Compuesto por la vista física de la base de datos, cuyos encargados de manipularla son los diseñadores de la base de datos.

  1. ¿Cuál es el principal objetivo que se pretende alcanzar en la arquitectura a tres niveles?

 El principal objetivo es separar los programas de aplicación de la base de datos física.

  1. Formúlese una relación de las responsabilidades del SGDB. Justifica cada responsabilidad explicando los problemas que surgirían si no se cumpliera con ella.

 El SGBD debe encargarse de :

 -Independencia de los datos. Debido a que si los programas dependen de la estructura de los datos

que emplean y se produce un cambio en dicha estructura, se pueden producir errores e incluso la completa interrupción del funcionamiento del programa.

 -Seguridad e integridad. Sin seguridad, los usuarios podrían acceder a los datos sin ningún tipo de regulación, así que los datos deben estar protegidos para evitar robos y manipulaciones o accesos no deseados.

 La integridad es que el sistema esté libre de errores, tanto de hardware, como del programador, del usuario final o debidos a la concurrencia. Lógicamente la existencia de errores provoca el funcionamiento incorrecto de la base de datos.

 -Redundancia mínima. Debido a que la redundancia da lugar a la ocupación de espacio innecesario y a la necesidad de tiempos de proceso mayores. Además, puede haber inconsistencia de los datos, y dichas contradicciones dan lugar a errores fatales.

 -Facilidad de recuperación de la información. El SGBD debe proporcionar al usuario herramientas

potentes de manejo de los datos para que pueda obtener la información que desea de una forma sencilla y rápida. Si el usuario necesita conocimientos avanzados y tiene que emplear mucho tiempo para obtener la información que desea, la base de datos no será cómoda ni amigable para el usuario, algo que hay que evitar a toda costa.

  1. ¿Cuáles son las funciones principales de un administrador de base de datos?

 -Definir los esquemas de la base de datos. De lo contrario se darían infinidad de problemas debido a la falta de información sobre qué datos tiene la base de datos y de qué tipo son.

 -Definición de la estructura y del método de acción. De no existir una estructura, los datos se encontrarían dispersos y sin seguir orden ninguno, lo que haría de la base de datos algo inútil pues no tendrían sentido los datos sin estructurar.

 -Modificación del esquema y de la organización física. Así los cambios producidos en la organización de los datos se realiza de una forma controlada y organizada.

 -Concesión de autorización para el acceso de los datos. De no realizar ésta tarea, se podría dar lugar al acceso a la base de datos por parte de usuarios no deseados.

 -Mantenimiento rutinario. Si no se mantiene un mantenimiento frecuente, podrían producirse erro-

res fatales que afectarían al correcto funcionamiento de la base de datos e incluso podrían detener totalmente su funcionamiento.

  1. ¿Cuáles son las funciones principales de un administrador de base de datos?

Los administradores de bases de datos están a cargo del rendimiento de la base de datos, de la retención y la seguridad. Ellos asisten a los procesos de desarrollo necesarios para un rendimiento óptimo de la base de datos. Deben identificar las señales de posibles fallas en el sistema y otros desastres que pudieran generar la pérdida información. Si evitar una falla o un desastre está fuera de su alcance, tienen que estar preparados para recuperarlos. También tienen que mantener los registros de usuarios y contraseñas para asegurar la seguridad de los datos en la base de datos.

EL MODELO OSI

el modelo osi capas

EL MODELO OSI: es una arquitectura por niveles para el diseño de sistemas de red que permite la comunicación entre todos los tipos de computadora.Está compuesto por siete niveles ordenados:

  • Físico (nivel1)
  • Red (nivel 2)
  • Transporte (nivel3)
  • Sesión (nivel 5)
  • Presentación (nivel 6)
  • Aplicación (nivel 7)

Cada nivel define una familia de funciones distintas de las de los otros niveles. Definiendo y asignando la funcionalidad de esta forma, los diseñadores crearon una arquitectura que es a la vez completa y flexible.

Funciones de los niveles:

Nivel Físico: coordina las funciones necesarias para transmitir el flujo de datos a través de un medio físico. También define los procedimientos y las funciones de los dispositivos físicos y las interfaces.

Nivel de enlace de datos: transforma el nivel físico, un simple medio de transmisión, en un enlace fiable y es responsable de la entrega nodo a nodo.

Nivel de red: es responsable de la entrega de un paquete desde el origen al destino y , posiblemente, a través de múltiples redes(enlaces). Cada paquete va del origen al destino, sean estos cuales sean.

Nivel de transporte: es responsable de la entrega origen a destino de todo el mensaje. Asegura que todo el mensaje llega intacto y en orden, supervisando tanto el control de errores como el control de flujo a nivel de origen a destino.

Nivel de sesión: es el controlador de diálogo de la red. Establece, mantiene y sincroniza la interacción entre sistemas de comunicación. Algunas responsabilidades específicas del nivel de sesión son el control de diálogo y la sincronización.

Nivel de presentación: está relacionado con la sintaxis y la semántica de la información intercambiada entre dos sistemas. Las responsabilidades especificas de este nivel son la traducción, compresión y cifrado.

Nivel de aplicación: permite al usuario acceder a la red. Proporciona las interfaces de usuario y el soporte para servicios como el correo electrónico, el acceso y la transferencia de archivos remotos, la gestión de datos compartidos y otros tipos de servicios para información distribuida.

Familia de protocolos TCP/IP

Se desarrolló antes que el modelo OSI y sus niveles de protocolo no coinciden.
La familia de protocolos TCP/IP está compuesta por cinco niveles: físico, enlace de datos, red, transporte y aplicación.
Es un protocolo jerárquico compuesto por módulos interactivos pero que no son necesariamente interdependientes.
TCP/IP define dos protocolos en el nivel de transporte: Protocolo de Control de Transmisión(TCP) y Protocolo de Datagramas de Usuario (UDP). En el nivel de red, el principal protocolo definido por TCP/IP es el protocolo de Redes (IP).

DIAGRAMA DE ESTADOS UML

Un diagrama de estados muestra la secuencia de estados que pasa un objeto durante su vida en respuesta a los estímulos recibidos, juntamente con sus respuestas. Definiremos tres conceptos que nos ayudarán a entender los diagramas de estados:

  • Acontecimiento: todo aquello que requiere la respuesta del sistema software.
  • Estado: condición de un objeto o de un caso de uso en un momento del tiempo.
  • Transición: cambio de estado como consecuencia de un acontecimiento.

A continuación se muestra un ejemplo de diagrama de estados para el diagrama de clases dado:

 

diagrama de estados uml

 

diagrama de estados uml 1El punto negro marca el estado inicial, y es por donde empieza a leerse el diagrama de estados.

Cada estado se representa con un globo y un nombre.

La flecha que une dos estados se llama transición.

Cada transición lleva asociado un nombre, que determina el acontecimiento que hace que se produzca dicha transición.

 

 

Uso de los diagramas de estados

Los diagramas de estados se pueden especificar para:

  • Una clase objetos:
    • Para describir por qué los objetos cambian de subclase.
    • Las subclases de un diagrama de estados no tienen por qué aparecer explícitamente en el esquema conceptual (diagrama de clases).
    • Para describir clases de objetos que presenten un importante comportamiento dinámico.
  • Casos de uso:
    • Para describir la secuencia legal en la que los acontecimientos se pueden producir en el mundo real.

 

¿Qué es Java? Compilación, Biblioteca | Unidad 1

  • Java es un lenguaje informático, originalmente desarrollado por un grupo de ingenieros de Sun a principios de los 90 como software para dispositivos electrónicos de consumo.
  • En 1995 se presenta como lenguaje de desarrollo de Internet.
  • En 1998 Sun Microsystems anuncia el Java 2 como marca comercial de la versión JDK 1.
  • Actualmente Java ha sido clasificada en tres ediciones distintas, cada una orientada hacia distintas áreas de desarrollo:

➢ J2SE o Java Standar Edition – Orientada al desarrollo de aplicaciones independientes de laplataforma.
➢ J2EE o Java Esterprise Edition – orientada para desarrollo de aplicaciones de entorno empresarial (versión más completa).
➢ J2ME o Java Micro Edition – Orientado a dispositivos con2

Características de Java

Java es un lenguaje orientado a objetos que proporciona un conjunto de clases potente y flexible.
Es un lenguaje interpretado y compilado. Después de la compilación se obtiene un código intermedio, denominado bytecodes que se puede ejecutar en distintas plataformas, siempre y cuando tengan instalada la máquina virtual de Java(JVM).
● Es un lenguaje independiente de la plataforma, ya que puede ejecutarse en redes de ordenadores de distinto tipo, gracias al bytecode.
● Java fue desarrollado basándose en C++, pero eliminando rasgos del mismo poco empleados (punteros, uniones, estructuras, define,…).

estructura general de un programa en java

● El archivo anterior (fichero fuente) debe tener la extensión .java y el nombre debe coincidir con el de la clase public si ésta existe. En el ejemplo anterior, el fichero se llamará HolaMundo.java.
● package holaMundo; Las clases de Java se agrupan en packages, que son librerías de clases. No es obligatorio utilizarlos.
● public class HolaMundo. Define el nombre de la clase. Un archivo puede contener más de una clase, pero sólo una puede ser public. Esta clase es la que contiene el programa principal (aquel que contiene el método main).

public static void main(String[] args)
//Método principal por el que cual comienza a ejecutarse la
aplicación.
System.out.println("hola mundo"); //visualiza
el texto “hola mundo” utilizando el método println.

● En el programa aparecen también separadores:

➢ [] corchetes. Se utilizan en arrays.
➢ ; punto y coma. Separa sentencias.
➢ , coma. Separa identificadores consecutivos en una declaración de variables.
➢ {} llaves. Agrupan determinadas instrucciones. Se utilizan en métodos, clases, bucles, etc.
➢ () paréntesis. Se utilizan en métodos, llamadas a métodos y para indicar prioridad en expresiones.

● Comentarios. Sirven para documentar un programa. Son ignorados por el compilador. Pueden representarse de las siguientes formas:

➢ /* comentario */. Puede ocupar varias líneas.
➢ //comentario. El comentario termina al final de la línea.
➢ /** comentario documentación */. Estos comentarios son utilizados por javadoc en la documentación que se genera automáticamente cuando se utiliza esta herramienta . Existe un conjunto de indicadores que javadoc reconoce como especiales y que empiezan por @:
@author, @version…

Compilación

● Los ficheros fuente (.java) se traducen a un código intermedio llamado bytecodes. Como resultado de esta compilación se obtienen ficheros con extensión .class. Una aplicación suele estar constituida por varios ficheros .class.
● Habitualmente se utilizan entornos de desarrollo (IDE) para crear ficheros fuente, compilarlos y ejecutarlos.
● Utilizaremos NetBeans como entorno de desarrollo, pero también veremos como se puede compilar un archivo sin utilizar un IDE, en modo comando.

● Proceso a seguir: Crear un programa fuente mediante cualquier editor de texto y almacenarlo con el nombre HolaMundo.java (nombre de la clase pública).

public class HolaMundo {
//primer programa de Java
public static void main(String argv []) {
System.out.println("Hola mundo");
    }
}

● Compilar desde la línea de comandos, utilizando el compilador javac:
javac HolaMundo.java
Sintaxis: javac [opciones] fichero1.java [fichero2.java..] Podemos ver todas las opciones ejecutando javac -help
● Podemos indicar la ruta de acceso a las clases con la opción -classpath del compilador o con la variable de entorno classpath. En este último caso, la ruta queda cambiada de modo general:
set CLASSPATH=rutaacceso1;rutaacceso2…..
● Las rutas de acceso corresponden a los archivos .jar, .zip o .class
● Para que el proceso funcione correctamente, la variable de entorno PATH debe indicar al sistema operativo donde buscar las utilidades de Java.
● Como resultado de la compilación obtendremos el fichero HolaMundo.class. Este código puede ejecutarse en distintas plataformas.
● Mediante la máquina virtual de Java, (Java Virtual Machine) los bytecodes se traducen a lenguaje máquina y se ejecutan:
java HolaMundo
Sintaxis: java [opciones] nombreclase [argumentos] ● Obteniendo la siguiente salida: Hola mundo
● Además del compilador javac y del intérprete java tenemos la herramienta javadoc que genera documentación en formato HTML a partir del código fuente de un programa.
Sintaxis: javadoc [opciones] fichero.java

Biblioteca de clases en Java

● Java permite a un usuario crear sus propias clases, objetos y métodos. Además, Java tiene su propia biblioteca de clases formada por un conjunto de paquetes estándar con más de 1000 clases que se pueden utilizar en los programas
de Java.
● La biblioteca de clases de Java proporciona, entre otros los siguientes paquetes:

➢ java.lang. Es el paquete por defecto.
➢ java.util. Permite la gestión de objetos en listas o colecciones. También contiene clases que permiten la generación de números aleatorios, gestión de fechas, etc.

➢ java.swing. Permite a los programas Java ofrecer interfaces gráficos de usuario y recoger los datos de entrada mediante ratón, teclado y otros dispositivos.
➢ java.awt. Permite gestionar los componentes para la construcción del interfaz del usuario.
➢ java.beans. Establece las formas en que los componentes en un interfaz de usuario pueden interactuar entre sí.
➢ java.io. Posibilita la comunicación de entrada y salida a periféricos y ficheros.

➢ java.math. Contiene utilidades matemáticas.
➢ java.net. Permite la comunicación entre un cliente y un servidor.
➢ java.rmi. Posibilita el acceso a objetos remotos.
➢ java.security. Permite el uso de mecanismos de seguridad.
➢ java.sql. Permite la conectividad con bases de datos.

Identificadores de Java

● Los identificadores permiten nombrar variables, métodos, objetos y clases de forma única ante el compilador. Esto nombres deben tener un sentido para el programador.
● Java hace distinción entre mayúsculas y minúsculas, por lo tanto, nombres o identificadores como nota, Nota y NOTA son distintos.
● Los identificadores pueden estar formados por cualquiera de los caracteres del código Unicode, aunque deben comenzar con una letra (a-z, A-Z), un subrayado(_) o símbolo de dólar($).
● La longitud del identificador es prácticamente ilimitada.
● No pueden utilizarse como identificadores palabras reservadas del lenguaje, espacios en blanco, símbolos coincidentes con operadores ni los valores lógicos true o false.
● Por convenio, los nombres de las variables y los métodos deberían empezar por una letra minúscula y los de las clases por mayúscula.
● Además, si el identificador está formado por varias palabras la primera se escribe en minúsculas (excepto para las clases) y las siguienes por mayúscula (notaMedia). Estas reglas no son obligatorias, pero son convenientes ya que ayudan al proceso de codificación de un programa, así como a su legibilidad.

Ejemplo de Identificadores Validos: NIF, añoNacimiento, botón, nota_media, nota1

Ejemplo de Identificadores No Validos: 1nota “nota” ‘nota’ descuento% Sueldo neto

Palabras reservadas

Las siguientes palabras clave están definidas en Java y no se pueden utilizar como identificadores:

abstract,  continue,  for,  new,  switch, boolean,  default, goto, null, synchronized, break, do, if, package, this, byte, double, implements, private, threadsafe, byvalue,  else,  import,  , protected, throw, case, extends, instanceof, public, transient, catch, false, int, return, true, char, final, interface, short, try, class, finally, long, static, void, const, float,  native,  super,  while.

● Además, el lenguaje se reserva unas cuantas palabras más, pero que hasta ahora no tienen un cometido específico: cast, future, generic, inner, operator, outer, rest, var.

En Java existen dos tipos principales de datos:
● Tipos de datos primitivos, simples o básicos. Están predefinidos en Java. Permiten almacenar enteros, números de coma flotante, caracteres y valores booleanos.
● Tipos de datos referenciales. Clases, intefaces y arrays.

Tipos de datos primitivos

tipos primitivos en java

Datos primitivos Almacenamiento

● C-2 -> Complemento a dos:
Bit de la izquierda para el signo (0=+, 1= -).
Si número >=0 resto de bits para valor binario.
Si número

Ejemplos de tipo short . Almacenamiento en 2 bytes

1  -1
255  -255
32767  -32767

Variables

● Zonas de memoria en las que se guardan datos que pueden cambiar de valor durante la ejecución de un programa.
● Para poder utilizar variables, primero hay que declararlas.
● Una variable se declara especificando el tipo y el identificador. Las variables pueden ser inicializadas en el momento de su declaración, siempre que el valor que se les asigne coincida con el tipo de dato de la variable.

int x; //declaración
x=4; //asignación de un valor
int y=0;//declaración e inicialización

Literales

● Los literales son elementos que sirven representar un valor
en el código fuente del programa. En Java existen literales
para los siguientes tipos de datos:
➢ Lógicos (booleanos): true, false. boolean correcto=false;
➢ Carácter (char).
➢ Enteros (byte, short, int, long).
➢ Reales (double, float).
➢ Cadenas de caracteres (String).

Literales de carácter

Se representan siempre entre comillas simples. Pueden escribirse de distintas formas:
Un símbolo del código UNICODE: ‘A’, ‘[‘, ‘Ñ’
En octal: ‘\101’ equivalente a ‘A’
En hexadecimal: ‘\u0041’ equivalente a ‘A’

Literales enteros

● Se almacenan por defecto como de tipo int. Si se trabaja con números muy grandes, se almacenan como long. Puede añadirse al final la letra L (l) para indicar que son de tipo long.
● Pueden expresarse en:
➢ Base 10: primer dígito entre 1 y 9, siguientes entre 0 y 9.
➢ Octal (base 8): primer dígito 0, siguientes entre 0 y 7.
➢ Hexadecimal (base 16): empiezan por 0X (0x), continúan con números entre 0 y 9 y/o letras A-F (a-f).

20 entero base 10
024 entero octal (20 en base 10)
0x14 entero hexadecimal (20 en base 10)
20L long base 10
028 no válido
0x4G no válido

 

Problema de Cocinas con Solución | Base de Datos

Hay una serie de fabricantes de muebles de cocina. De cada fabricante se dispone de un nombre, una dirección y una relación de números de teléfono. Cada uno de ellos fabrica muebles de cocina. Un mueble de cocina tiene una determinada línea, un determinado color, unas dimensiones dadas (ancho * alto * largo), y puede tener una de las siguientes categorías excluyentes: mueble alto, mueble bajo, panel y encimera. De los muebles bajos interesa saber la altura sobre el suelo y de las encimeras interesa saber su tipo (mármol o aglomerado).

Cada fabricante puede trabajar con varios distribuidores y cada distribuidor trabaja al menos con un fabricante. De un distribuidor se dispone el nombre, dirección y número de teléfono.

Una cocina la componen una serie de muebles de cocina de distinto tipo. Cada mueble de cocina sólo podrá formar parte de una única cocina. De una cocina nos interesa saber el número de muebles que la componen, así como cuántos de ellos hay de cada tipo.

Cada cocina la puede vender un único distribuidor en una determinada fecha de venta, aunque cada distribuidor puede vender varias cocinas. Un distribuidor puede ceder una cocina a otro, para que éste pueda venderla.

Cada cocina la debe montar al menor un montador y el mismo montador puede montar varias cocinas. De un montador nos interesa su Nif, nombre, dirección, teléfono y el número de cocinas que ha montado.

Cada cocina puede ser comprada por uno o varios clientes y el mismo cliente puede comprar varias cocinas. De un cliente nos interesa su Nif, su nombre, dirección y número de teléfono.

Discusión del enunciado Parte 1

” Hay una serie de fabricantes de muebles de cocina. De cada fabricante se dispone de un nombre, una dirección y una relación de números de teléfono. Cada uno de ellos fabrica muebles de cocina. Un mueble de cocina tiene una determinada línea, un determinado color, unas dimensiones dadas (ancho * alto * largo), y puede tener una de las siguientes categorías excluyentes: mueble alto, muble bajo, panel y encimera. De los muebles bajos interesa saber la altura sobre el suelo y de las encimeras interesa saber su tipo (mármol o aglomerado).”

En este primer párrafo se reconocen inicialmente las entidades FABRICANTE y MUEBLE. Es de suponer que dos fabricantes no pueden tener el mismo nombre, por lo que se empleará el atributo “Nombre” como identificador principal de los distintos ejemplares de esta entidad.

Se tiene además una interrelación 1:N Fabrica entre estas dos entidades. Si suponemos que todo fabricante de muebles de cocina lo es porque fabrica muebles de cocina, pondremos cardinalidad mínima 1. Ahora bien, si suponemos que podemos tener fabricantes de muebles de cocina registrados que no fabriquen muebles antes de que éstos empezaran a producir, se podría suponer cardinalidad mínima 0. Optamos en nuestro caso por la primera de las opciones. Por el contrario, todo mueble lo debe fabricar un determinado fabricante y no se concibe que haya muebles no fabricados por nadie, por lo que la cardinalidad mínima será 1.

En cuanto a la entidad MUEBLE, nótese la distinción en varios tipos que de ésta se hace. Consideramos que esta clasificación da lugar a un jerarquía que será total y exclusiva en la que el supertipo será la entidad MUEBLE, mientras que los subtipos serán las entidades ENCIMERA, MUEBLE ALTO, MUEBLE BAJO y PANEL. Cada uno de los ejemplares MUEBLE tiene unas características que serán comunes a cualquiera de los subtipos y que constituirán por tanto los atributos del supertipo. Se tendrá así los atributos “Línea”, “Color, “Ancho”, “Alto” y “Largo”. Dado que se requiere un identificador en esta entidad y ninguno de estos atributos, ni ninguna combinación de éstos identifica unívocamente a los diversos ejemplares de MUEBLE, se introduce un atributo “Id_mueble” que será el identificador principal de esta entidad. En cuanto a los subtipos, tendremos que la entidad ENCIMERA tiene un atributo “Tipo” cuyo dominio contendrá tan sólo dos valores y que la entidad MUEBLE BAJO tiene un atributo que será la “Altura”.

” Cada fabricante puede trabajar con varios distribuidores y cada distribuidor trabaja al menos con un fabricante. De un distribuidor se dispone el nombre, dirección y una relación de números de teléfono. “

Se tiene una nueva entidad DISTRIBUIDOR y una interrelación Trabaja con la entidad FABRICANTE. Ambas entidades tienen como atributos “Nombre”, “Dirección” y “Teléfono”.

Podría pensarse, dado que las entidades FABRICANTE y DISTRIBUIDOR comparten los mismos atributos, con las mismas características, que existe una generalización de ambas entidades y que éstas dos entidades no son sino subtipos de otra entidad que podría llamarse EMPRESA. Esta generalización parece carecer de interés en este caso, ya que esa entidad no sería más que un concepto artificialmente establecido que carecería de una de las propiedades esenciales de las entidades, la de tratarse de objetos de interés para los propósitos del sistema. No interesan las empresas en sí mismas, sino tan sólo aquellas que puedan ser fabricantes o distribuidoras. Por este motivo se rechaza esta generalización.

Entre los fabricantes y distribuidores existe una interrelación Trabaja. Esta interrelación es de tipo N:M. Además, como todo distribuidor debe trabajar al menos con un fabricante, se tiene una cardinalidad mínima 1.

problema de cocinas base de datos

Discusión del Enunciado Parte 2

” Una cocina la componen una serie de muebles de cocina de distinto tipo. Cada mueble de cocina sólo podrá formar parte de una única cocina. De una cocina nos interesa saber el número de muebles que la componen, así como cuántos de ellos hay de cada tipo. “

Se introduce una nueva entidad COCINA que mantiene una interrelación 1:N Compone con la entidad MUEBLE. No todo mueble formará parte de una cocina, cardinalidad mínima 0, pero sí toda cocina la compondrá al menos un mueble, cardinalidad mínima 1. Para disponer de un identificador principal en la entidad COCINA, precisamos introducir el atributo “Código”. Además de este atributo, esta entidad tiene los siguientes atributos: “N_muebles”, “N_altos”, “N_bajos”, “N_encimeras” y “N_paneles”, todos ellos calculables a partir de los muebles que componen cada cocina. Por ello se tratan como atributos derivados.

” Cada cocina la puede vender un único distribuidor en una determinada fecha de venta, aunque cada distribuidor puede vender varias cocinas. Un distribuidor puede ceder una cocina a otro, para que éste pueda venderla.

Se tiene una interrelación 1:N Vende entre las entidades COCINA y DISTRIBUIDOR. Esta interrelación tiene un atributo propio que es la “Fecha de venta”. Se tiene además otra interrelación reflexiva N:M Cede en la entidad DISTRIBUIDOR. Aunque no se dice en el enunciado puede suponerse que un distribuidor puede hacer cesiones a varios distribuidores y que el mismo distribuidor puede recibir cesiones de varios distribuidores.

entidad relacion problema de cocinas

Discusion del Enunciado Parte 3

” Cada cocina la debe montar al menor un montador y el mismo montador puede montar varias cocinas. De un montador nos interesa su Nif, nombre, dirección, teléfono y el número de cocinas que ha montado. “

Surge una nueva entidad MONTADOR con una interrelación N:M Monta con la entidad COCINA. Esta interrelación tiene cardinalidad mínima 1 en ambos extremos. Son atributos de un montador el “Nif”, “Nombre”, “Dirección”, “Teléfono” y “Número de Cocinas”. Este último sería un atributo derivado, pues está implícitamente presente en la interrelación Monta. Además consideramos como identificador principal el “Nif” y como identificadores alternativos la “Dirección” y el “Teléfono”.

“Cada cocina puede ser comprada por uno o varios clientes y el mismo cliente puede comprar varias cocinas. De un cliente nos interesa su Nif, su nombre, dirección y número de teléfono. “

Aparece una nueva entidad CLIENTE con atributos similares a la entidad MONTADOR. Puede pensarse aquí nuevamente en una generalización similar a la que planteábamos con FABRICANTE y DISTRIBUIDOR, pero se rechaza por motivos similares.

Del enunciado se desprende que hay una interrelación N:M Compra con la entidad COCINA, la cual tiene cardinalidad mínima 1 en ambos extremos.

El resultado de todas las consideraciones realizadas en esta parte, se presentan en la siguiente figura:

entidad relacion parte 3 de cocinas

Solución Final de la Entidad Relación

entidad relacion cocinas

Supuestos semánticos complementarios y semántica no reflejada

  • Se ha supuesto que todo fabricante produce al menos 1 mueble.
  • Se ha supuesto que no hay muebles cuyo fabricante se desconozca.
  • Se ha supuesto que en las cesiones entre distribuidores no interesa recoger la cocina cedida.
  • Se ha supuesto que todo montador ha montado al menos 1 cocina.
  • Se ha supuesto que todo cliente ha comprado al menos 1 cocina.

Por último, no figuran supuestos semánticos en el enunciado que no se hayan podido recoger.

Modelo relacional

.FABRICANTE (#Nombre, Direccion, Telef)

.DISTRIBUIDOR (#Nombre, Direccion, Telef)

.MUEBLES (#Id_mueble, Linea, Color, Ancho, Largo, Alto, Id_coc)

Claves ajenas:

– Id_coc referencia a COCINA.

.MONTADOR (#Nif, Nombre, N_cocinas, Color)

.ENCIMERA (Tipo, #Cod, Id_mueble)

Claves ajenas:

– Id_mueble referencia a MUEBLES.

.ALTO (#Cod, Id_mueble)

Claves ajenas:

– Id_mueble referencia a MUEBLES.

.BAJO (Altura, #Cod, Id_mueble)

Claves ajenas:

– Id_mueble referencia a MUEBLES.

.PANEL (#Cod, Id_mueble)

Claves ajenas:

– Id_mueble referencia a MUEBLES.

.Fabrica (#Id_mueble, #Nombre)

Claves ajenas:

– #Id_mueble referencia a MUEBLES.

– #Nombre referencia a FABRICANTE.

.Monta (#Id_coc, #Nif)

Claves ajenas:

– #Id_coc referencia a COCINA.

– #Nif referencia a MONTADOR.

.Compra (#Id_coc, #Nif)

Claves ajenas:

– #Id_coc referencia a COCINA.

– #Nif referencia a CLIENTE.

.Trabaja (#Nombre, #Nombre_DISTRIBUIDOR)

Claves ajenas:

– #Nombre referencia a FABRICANTE.

– #Nombre_DISTRIBUIDOR referencia a DISTRIBUIDOR.

.Cede (#Nombre, #Nombre_DISTRIBUIDOR)

Claves ajenas:

– #Nombre referencia a DISTRIBUIDOR.

– #Nombre_DISTRIBUIDOR referencia a DISTRIBUIDOR.

.COCINA (#Id_coc, N_muebles, Dimensiones, N_encime, N_paneles, Nombre, F_venta)

Claves ajenas:

– Nombre referencia a DISTRIBUIDOR.

.CLIENTE (#Nif, Direccion, Nombre, Telef)

 

SCRIPT SQL

  CREATE DATABASE IF NOT EXISTS 2_practica;
  USE 2_practica;
 
CREATE TABLE FABRICANTE (
Nombre VARCHAR (25) NOT NULL,
Direccion VARCHAR(25) NOT NULL,
Telefono VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(Nombre));
 
INSERT INTO FABRICANTE(Nombre, Direccion, Telefono) VALUES("Robert Fabric", "Calle Odonnell 99", "915745987");
INSERT INTO FABRICANTE(Nombre, Direccion, Telefono) VALUES("Falcon Muebles","Calle Beniferri 16","915749872");
INSERT INTO FABRICANTE(Nombre, Direccion, Telefono) VALUES("AEG","Calle Alcala 88","915749972");
 
CREATE TABLE DISTRIBUIDOR (
Nif VARCHAR(25),
Nombre_Distribuidor VARCHAR(25) NOT NULL,
Direccion VARCHAR(25) NOT NULL, 
Telefono VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(Nombre_Distribuidor));
 
INSERT INTO DISTRIBUIDOR (Nif, Nombre_Distribuidor, Direccion, Telefono) VALUES ("51228908H", "Tabernero", "Canillejas", "636556998");
INSERT INTO DISTRIBUIDOR (Nif, Nombre_Distribuidor, Direccion, Telefono) VALUES ("51228766S", "Señor_Acuña", "Coslada",  "065569968");
INSERT INTO DISTRIBUIDOR (Nif, Nombre_Distribuidor, Direccion, Telefono) VALUES ("51229087K", "Luis_Miguel", "Vallecas", "636500040");
 
CREATE TABLE Cocina(
Id_coc VARCHAR (5) NOT NULL,
N_muebles VARCHAR (25) NOT NULL, 
Dimensiones VARCHAR (25) NOT NULL, 
N_encime VARCHAR (25) NOT NULL,
Nombre_Distribuidor VARCHAR (25) NOT NULL,
N_paneles VARCHAR (25) NOT NULL, 
F_venta VARCHAR (25) NOT NULL,
CONSTRAINT PRIMARY KEY (Id_coc));
ALTER TABLE Cocina ADD CONSTRAINT FOREIGN KEY(Nombre_Distribuidor) REFERENCES DISTRIBUIDOR(Nombre_Distribuidor);
 
INSERT INTO Cocina (Id_coc, N_muebles, Dimensiones, N_encime, Nombre_Distribuidor, N_paneles, F_Venta) VALUES("001","Mesa","120x60","AAA","Tabernero","0","30-04-2012");
INSERT INTO Cocina (Id_coc, N_muebles, Dimensiones, N_encime, Nombre_Distribuidor, N_paneles, F_Venta) VALUES("002","Silla","100x30","BBB","Señor_Acuña","0","03-10-2015");
INSERT INTO Cocina (Id_coc, N_muebles, Dimensiones, N_encime, Nombre_Distribuidor, N_paneles, F_Venta) VALUES("003","Taburete","60x40","CCC","Luis_Miguel","0","09-11-2011");
 
CREATE TABLE MUEBLES (
Id_mueble VARCHAR(25) NOT NULL, 
Linea VARCHAR(25) NOT NULL, 
Color VARCHAR(25) NOT NULL,
Ancho VARCHAR(25) NOT NULL,
Largo VARCHAR(25) NOT NULL,
Alto VARCHAR(25) NOT NULL, 
Id_coc VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(Id_mueble));
ALTER TABLE MUEBLES ADD CONSTRAINT FOREIGN KEY(Id_coc) REFERENCES Cocina (Id_coc);
 
INSERT INTO MUEBLES (Id_mueble, Linea, Color, Ancho, Largo, Alto, Id_coc) VALUES("1000", "Especial", "Negro", "150", "120", "100", "001");
INSERT INTO MUEBLES (Id_mueble, Linea, Color, Ancho, Largo, Alto, Id_coc) VALUES("1001", "Rustico", "Azul", "120", "130", "90", "002");
INSERT INTO MUEBLES (Id_mueble, Linea, Color, Ancho, Largo, Alto, Id_coc) VALUES("1002", "Estandar", "Multicolor", "220", "80", "105", "003");
 
CREATE TABLE MONTADOR (
Nif VARCHAR(25) NOT NULL,
Nombre VARCHAR(25) NOT NULL,
N_cocinas VARCHAR(25) NOT NULL,
Color VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(Nif));
 
INSERT INTO MONTADOR(Nif, Nombre, N_cocinas, Color) VALUES("X8932623L","Ever","XXXX","Verde");
INSERT INTO MONTADOR(Nif, Nombre, N_cocinas, Color) VALUES("X9832634S","Paloma","ZZZZ","Naranja");
INSERT INTO MONTADOR(Nif, Nombre, N_cocinas, Color) VALUES("X8976837Z","Jose Ramon","YYYY","Amarillo");
 
CREATE TABLE ENCIMERA (
Tipo VARCHAR(25) NOT NULL,
Cod VARCHAR(25) NOT NULL, 
Id_mueble VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (Cod));
ALTER TABLE ENCIMERA ADD CONSTRAINT FOREIGN KEY (Id_mueble) REFERENCES MUEBLES(Id_mueble);
 
INSERT INTO ENCIMERA(Tipo, Cod, Id_mueble) VALUES("Madera","088","1000");
INSERT INTO ENCIMERA(Tipo, Cod, Id_mueble) VALUES("Metal","099","1001");
INSERT INTO ENCIMERA(Tipo, Cod, Id_mueble) VALUES("Plastico","077","1002");
 
 
CREATE TABLE ALTO (
Cod VARCHAR(25) NOT NULL, 
Id_mueble VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (Cod));
ALTER TABLE ALTO ADD CONSTRAINT FOREIGN KEY(Id_mueble) REFERENCES MUEBLES(Id_mueble);
 
CREATE TABLE BAJO (
Altura VARCHAR(25) NOT NULL,
Cod VARCHAR(25) NOT NULL, 
Id_mueble VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (Cod));
ALTER TABLE BAJO ADD CONSTRAINT FOREIGN KEY(Id_mueble) REFERENCES MUEBLES (Id_mueble);
 
CREATE TABLE PANEL(
Cod VARCHAR(25) NOT NULL,
Id_mueble VARCHAR(25) NOT NULL,
PRIMARY KEY (Cod));
ALTER TABLE PANEL ADD CONSTRAINT FOREIGN KEY (Id_mueble) REFERENCES MUEBLES(Id_mueble);
 
CREATE TABLE Fabrica (
Id_mueble VARCHAR(25) NOT NULL, 
Nombre VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(Id_mueble, Nombre));
ALTER TABLE Fabrica ADD CONSTRAINT FOREIGN KEY (Id_mueble) REFERENCES MUEBLES(Id_mueble);
ALTER TABLE Fabrica ADD CONSTRAINT FOREIGN KEY (Nombre) REFERENCES FABRICANTE(Nombre);
 
 
CREATE TABLE Monta (
Id_coc VARCHAR(25) NOT NULL,
Nif VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(Id_coc, Nif));
ALTER TABLE MONTA ADD FOREIGN KEY (Id_coc) REFERENCES COCINA(Id_coc);
ALTER TABLE MONTA ADD FOREIGN KEY (Nif) REFERENCES MONTADOR (Nif);
 
CREATE TABLE CLIENTE (
  Nif VARCHAR(9) NOT NULL,
  Nombre VARCHAR(20) NOT NULL,
  Direccion VARCHAR(105) NOT NULL,
  Telefono VARCHAR(25) NOT NULL,   
  CONSTRAINT PRIMARY KEY  (Nif));
 
CREATE TABLE Compra (
Id_coc VARCHAR(25) NOT NULL,
Nif VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (Id_coc, Nif));
ALTER TABLE Compra ADD FOREIGN KEY (Id_coc) REFERENCES COCINA(Id_coc);
ALTER TABLE Compra ADD FOREIGN KEY (Nif) REFERENCES CLIENTE(Nif);
 
CREATE TABLE  TRABAJA (
  NOMBRE_DISTRIBUIDOR VARCHAR(25) NOT NULL,
  Nombre VARCHAR(25) NOT NULL,   
  CONSTRAINT PRIMARY KEY (NOMBRE, NOMBRE_DISTRIBUIDOR));
  ALTER TABLE TRABAJA ADD CONSTRAINT FOREIGN KEY (NOMBRE_DISTRIBUIDOR) REFERENCES DISTRIBUIDOR(NOMBRE_DISTRIBUIDOR);
  ALTER TABLE TRABAJA ADD CONSTRAINT FOREIGN KEY (NOMBRE) REFERENCES FABRICANTE(NOMBRE);
 
CREATE TABLE CEDE (
  Nombre_Distribuidor VARCHAR(25) NOT NULL,
  Nombre VARCHAR(25) NOT NULL,   
  CONSTRAINT PRIMARY KEY (Nombre, Nombre_Distribuidor));
  ALTER TABLE CEDE ADD FOREIGN KEY (Nombre_Distribuidor) REFERENCES DISTRIBUIDOR(Nombre_Distribuidor);
  ALTER TABLE CEDE ADD FOREIGN  KEY (NOMBRE) REFERENCES FABRICANTE(Nombre);

Examen de Base de Datos Primer Trimestre

examen de base de datos

Esto es un examen de Base de Datos para el ciclo formativo  de grado superior de Desarrollo de Aplicaciones Multiplataforma.

 

1- Señale la/s opción/es Falsas sobre el modelo E/R:

  1.  Refleja la existencia de los datos, y o que se hacer con ellos.
  2. Se incluyen todos los datos del sistema en estudio y, por tanto, no está orientado a aplicaciones particulares
  3. Es independiente de las bases de datos y sistemas operativos concretos.
  4. Tiene en cuenta restricciones de espacio, almacenamiento, y tiempo de ejecución.
  5. Está abierto a la evolución del sistema

2) El SQL-DML: Es el Lenguaje especial para describir el esquema conceptual de la BD. Permite la definición de los objetos de la BD.

  1.  Verdadero
  2. Falso

3) Determine las respuestas verdaderas sobre las generalizaciones E1 es-un E2:

  1.  E1 (subtipo es una subclase especial de E2 (supertipo).
  2. E1 no hereda los atributos de E2 y pero puede tener atributos propios
  3.  E1 no tiene la misma clave que E2
  4.  Existe una correspondencia univoca de E1 a E2

4) Dentro de la Arquitectura ANSI/X3/SPARC para Sistemas de Base de Datos encontramos un nivel que es el más cercano a los usuarios, es

  1.  Nivel Externo
  2.  Nivel Interno
  3.  Nivel Representativo
  4.  Nivel Físico

5) En el modelo entidad Relación: (todas falsas)

  1. No pueden existir varias relaciones entre dos entidades
  2. No puede darse relaciones con los subtipos de una generación
  3. Las relaciones no pueden llevar atributos multivaluados
  4. Las relaciones relaciones reflexivas no pueden ser N:N
  5. Las relaciones fuertes con las débiles pueden ser N:N

6) Las entidades débiles

  1. Tienen siempre un identificador principal distinto al de la entidad fuerte de la que dependen
  2. Su campo clave está compuesto varios atributos propios
  3. Todas las entidades débiles en existencia lo son en identificación
  4. Todas las entidades débiles en identificación lo son en existencia
  5. Todas son incorrectas

7) SGBD. Componentes Funcionales

SBMS o SGDB Conjunto de elementos software con capacidad para definir, mantener y utilizar una base de datos.
Un Sistema de Gestión de Bases de Datos debe permitir:
a) definir estructuras de almacenamiento, acceder a los datos de forma eficiente y segura, organizar la actualización multiusuario etc…
Un Gestor o Manipulador de la BD se compone:
b) de un conjunto de programas que sirven de intermediario entre los datos y los programas

Componentes Funcionales del SGBD:

1. Gestor de archivos: Asigna espacio en disco a las estructuras de datos
2. Gestor de BD: Interfaz entre los datos de bajo nivel y los programas de aplicación
3. Procesador de consultas: Traduce el DML a llamadas normales a funciones en lenguaje huésped
4. Compilador de DDL: Convierte el DDL en tablas de metadatos
5. Archivos de Datos: Almacenan físicamente la BD
6. Archivos de Índices: Permiten un acceso rápido a los datos.
7. Diccionario de Datos: Contiene la información e la estructura de la BD

8) Ventajas de las Base de Datos frente a los ficheros.

• Independencia de los datos respecto a los tratamientos y viceversa
• Coherencia de los resultados
• Mejor disponibilidad de los datos para el conjunto de usuarios
• Mayor valor informativo
• Mejor y más normalizada documentación de la información la cual está integrada con los datos
• Mayor eficiencia en la recogida, validación e introducción de los datos en el sistema
• Reducción del espacio de almacenamiento

9) Clasificación de los atributos y simbología.

Atendiendo al número de componentes
Simples: solamente tienen 1 componente (Ej: salario)
Compuestos: tienen más de 1 componente (Ej: fecha -> año + mes + día)
Atendiendo al número de valores
Univaluados: tiene un solo valor por cada ocurrencia de la entidad o relación a la que pertenece
Multivaluados: tiene más de un valor por cada ocurrencia de la entidad o relación a la que pertenece (Ej: Teléfonos).
Atendiendo a su obtención
Derivados o calculados: representan un valor obtenido a partir de uno o más atributos (Ej: nº visitas).

10) Cardinalidad. Tipos y Ejemplos

Es Simplemente la forma en que se relacionan las Entidades, o expresa cuantas entidades se Relacionan con otras entidades. Se deben definir dos tipos de cardinalidad: mínima y máxima. La mínima se refiere al número mínimo de correspondencias en que una entidad puede participar, y la máxima, el número máximo.
Existen 4 tipos de relaciones que pueden establecerse entre entidades, las cuales establecen con cuantas ocurrencias de entidad de tipo B se puede relacionar una ocurrencia de entidad de tipo A:
Cardinalidad Tipos:
1. Relaciones “uno a uno”
2. Relaciones de “uno a varios”
3. Relaciones de “varios con varios”

Tienda Informática Ejercicio de Base de Datos

Una empresa de distribución de artículos informáticos pretende obtener una base de datos que contenga información sobre los clientes (nombre, dirección, teléfono) y los artículos que adquieren (denominación, precio, stock).

Se desea, por cada compra del artículo, obtener su fecha de compra y el número de unidades vendidas del mismo.

Puede haber artículos que no han sido comprados por ningún cliente.

Se pretende que la información de la base de datos esté lo suficientemente organizada para realizar un correcto mantenimiento (sin redundancias ni inconsistencias). En particular, no se debería permitir modificar ni el código de un cliente ni el de un artículo si existe alguna compra de éstos. Si se permite eliminar la compra al desaparecer el cliente y/o el artículo.

Se desea, asimismo, obtener los siguientes resultados:

  • 1. Obtener el código de los artículos adquiridos por el cliente 013
  • 2. Obtener el código de los clientes que ha comprado algún ordenador portátil
  • 3. Obtener el código de los clientes que ha comprado más de 2 tarjetas de red
  • 4. Obtener el código de los clientes que ha comprado algún artículo posterior al 31/10/06
  • 5. Obtener una consulta en la que aparezca el nombre y teléfono de los clientes que han comprado un monitor TFT
  • 6. Obtener un listado agrupado por cliente y el número total de artículos adquiridos por éste
  • 7. Obtener el precio medio de venta de los artículos de la empresa
  • 8. Obtener el número medio de unidades vendidas de los artículos
  • 9. Obtener un listado con el número de unidades adquiridas de cada artículo
  • 10. Obtener el número medio de unidades vendidas por cliente
  • 11. Obtener un listado con el nombre del cliente y la denominación de los artículos que ha adquirido
  • 12. Obtener el código del cliente que más unidades ha adquirido de algún artículo
  • 13. Obtener el nombre del cliente que más unidades ha adquirido de algún artículo
  • 14. Obtener el código de los clientes que han adquirido más de 2 artículos
  • 15. Obtener el nombre de los clientes que han adquirido más de 2 artículos
  • 16. Obtener el nombre de los clientes que han adquirido más artículos que la media
  • 17. Eliminar el cliente con código ‘011’ y ver lo que ha ocurrido con sus compras.

Propuesta de Solución para la Entidad Relación

 

Diagrama Entidad Relacion Tienda Informatica

Modelo Relacional

En el diagrama hay dos entidades que se transforman en sendas tablas, cada una con sus atributos correspondientes: CLIENTE Y ARTICULO. La interrelación Compra es M:N, por lo que también se transforma en una tabla cuya clave primaria está formada por la concatenación de las claves primarias de las tablas que interrelaciona. En este caso, como la interrelación tiene un identificador principal que es Fecha, ésta también se añade a la clave primaria de la tabla COMPRA. Incorporar este atributo a la clave primaria nos va a permitir contemplar la posibilidad de que un cliente compre el mismo artículo en fechas distintas.
Además, en la tabla COMPRA, tanto el código del cliente, como el código del artículo serán claves ajenas y referenciarán a las tablas CLIENTE y ARTICULO, respectivamente.

Por otro lado, para evitar inconsistencias en el modelo a la hora de realizar actualizaciones, se ha supuesto que si se elimina un cliente de la Base de Datos, se eliminarán todas las compras realizadas por éste. Por tanto, la referencia Cod_Cli será de un borrado en cascada. No permitiremos modificar el código del cliente si éste tiene alguna compra realizada, por lo que la modificación será, por defecto, restrictiva. De forma análoga, hemos supuesto que la referencia Cod_Art en COMPRAS será un borrado en cascada y una modificación restrictiva.

Modelo entidad Relacion a Relacional

Normalización

1FN: (Primera Forma Normal) Si suponemos que no hay ningún grupo repetitivo en las tablas, todas se encontrarán en 1FN.

2FN: (Segunda Forma Normal) para comprobar si una relación se encuentra en 2FN, habrá que verificar que está en 1FN y además cada atributo no principal depende de forma funcional completa de la clave primaria.
Esto es trivial en CLIENTE y ARTICULO dado que la clave primaria de ambas tablas está formada por un sólo atributo.
En el caso de la tabla COMPRA, únicamente es posible determinar el número de unidades vendidas del artículo a un cliente en un momento dado. Es decir, si eliminamos cualquier atributo de la clave, ésta ya no determinaría el número de unidades vendidas. Por tanto, COMPRAS está en 2FN.

3FN: (Tercera Forma Normal) para comprobar si una relación o tabla se encuentra en 3FN, habrá que verificar que está en 2FN y además cada atributo no principal no depende funcionalmente de otro atributo no principal.
Esto es trivial en COMPRA, dado que solamente hay un atributo no principal.
En el caso de la tabla CLIENTE puede parecer que Nombre determina a la Dirección y al Teléfono. Esto es así porque Nombre podría ser una clave alternativa. Pero no es ninguna restricción suponer que Nombre no puede ser clave alternativa en nuestro modelo, dado que existen multitud de nombres repetidos y, por tanto, dado un nombre, no podríamos determinar ni la dirección ni el teléfono del cliente. Luego, podemos concluir que se encuentra en 3FN.
En el caso de la tabla ARTICULO, ningún atributo no principal depende funcionalmente de ningún otro atributo no principal. Se encuentra, pues, en 3FN.

En consecuencia, no hay que hacer, por tanto, ningún cambio en el esquema relacional obtenido directamente a partir del esquema E/R.

Creación de la Base de Datos

DROP TABLE COMPRAS;
DROP TABLE CLIENTE;
DROP TABLE ARTICULO;
 
CREATE TABLE CLIENTE (
   COD_CLI  CHAR(3),
   NOMBRE VARCHAR2(40) NOT NULL,
   DIRECCION VARCHAR2(40) NOT NULL,
   TLF  NUMBER(9),
   CONSTRAINT CLIENTE_CP PRIMARY KEY(COD_CLI)
);
 
 
CREATE TABLE ARTICULO (
   COD_ART  CHAR(4),
   DENOM    VARCHAR2(40) NOT NULL,
   PRECIO   NUMBER(6,2)  NOT NULL,
   STOCK    INTEGER,
   CONSTRAINT ARTICULO_CP PRIMARY KEY(COD_ART)
);
 
CREATE TABLE COMPRAS (
   ID_CLI      CHAR(3),
   ID_ART     CHAR(4),
   FEC_COMPRA DATE   ,
   NUM_UNID   INTEGER,
   CONSTRAINT COMPRAS_CP PRIMARY KEY(ID_CLI, ID_ART, FEC_COMPRA),
   CONSTRAINT COMPRAS_FK1 FOREIGN KEY(ID_CLI) REFERENCES CLIENTE ON DELETE CASCADE,   
   CONSTRAINT COMPRAS_FK2 FOREIGN KEY(ID_ART) REFERENCES ARTICULO ON DELETE CASCADE
);
 
DROP TABLE COMPRAS;
DROP TABLE CLIENTE;
DROP TABLE ARTICULO;
 
CREATE TABLE CLIENTE (
   COD_CLI  CHAR(3),
   NOMBRE VARCHAR2(40) NOT NULL,
   DIRECCION VARCHAR2(40) NOT NULL,
   TLF  NUMBER(9),
   CONSTRAINT CLIENTE_CP PRIMARY KEY(COD_CLI)
);
 
CREATE TABLE ARTICULO (
   COD_ART  CHAR(4),
   DENOM    VARCHAR2(40) NOT NULL,
   PRECIO   NUMBER(6,2)  NOT NULL,
   STOCK    INTEGER,
   CONSTRAINT ARTICULO_CP PRIMARY KEY(COD_ART)
);
 
CREATE TABLE COMPRAS (
   ID_CLI     CHAR(3),
   ID_ART     CHAR(4),
   FEC_COMPRA DATE     NOT NULL,
   NUM_UNID   INTEGER,
   CONSTRAINT COMPRAS_CP PRIMARY KEY(ID_CLI, ID_ART),
   CONSTRAINT COMPRAS_FK1 FOREIGN KEY(ID_CLI) REFERENCES CLIENTE ON DELETE CASCADE,   
   CONSTRAINT COMPRAS_FK2 FOREIGN KEY(ID_ART) REFERENCES ARTICULO ON DELETE CASCADE);
 
INSERT INTO CLIENTE VALUES ('011', 'Ana García',  'Alcalá 330',     914849303);
INSERT INTO CLIENTE VALUES ('012', 'Luis Ramos',  'Castellana 110', 914394943);
INSERT INTO CLIENTE VALUES ('013', 'Juan García', 'Ulises 21',      915656501);
INSERT INTO CLIENTE VALUES ('014', 'Marga Fdez.', 'Puentalarra 57', 913389307);
INSERT INTO CLIENTE VALUES ('015', 'Pedro Glez.', 'Gerona 14',      917845308);
 
INSERT INTO ARTICULO VALUES ('0001', 'Ord. Sobremesa',     600, 12);
INSERT INTO ARTICULO VALUES ('0002', 'Ord. Portátil',     1000,  6);
INSERT INTO ARTICULO VALUES ('0003', 'Tarjeta Red',         20, 25);
INSERT INTO ARTICULO VALUES ('0004', 'Impresora Láser',    200,  4);
INSERT INTO ARTICULO VALUES ('0005', 'Ratón USB',            7, 50);
INSERT INTO ARTICULO VALUES ('0006', 'Monitor TFT',        250, 10);
INSERT INTO ARTICULO VALUES ('0007', 'Router inalámbrico', 100, 30);
 
 
INSERT INTO COMPRAS VALUES('011', '0001', '25/10/06', 1);
INSERT INTO COMPRAS VALUES('011', '0005', '26/10/06', 2);
INSERT INTO COMPRAS VALUES('012', '0002', '01/11/06', 1);
INSERT INTO COMPRAS VALUES('012', '0003', '01/11/06', 3);
INSERT INTO COMPRAS VALUES('013', '0006', '27/10/06', 2);
INSERT INTO COMPRAS VALUES('013', '0003', '27/10/06', 2);
INSERT INTO COMPRAS VALUES('015', '0004', '03/11/06', 1);
INSERT INTO COMPRAS VALUES('015', '0002', '24/11/06', 1);
INSERT INTO COMPRAS VALUES('015', '0007', '15/11/06', 2);
 
COMMIT;

Consultas varias a la Base de Datos

#REM Obtener el código de los artículos adquiridos por el cliente 013 
 
SELECT ID_ART FROM COMPRAS 
WHERE ID_CLI = '013';
 
#REM Obtener el código de los clientes que ha comprado algún ordenador portátil
 
SELECT ID_CLI FROM COMPRAS 
WHERE ID_ART = '0002';
 
#REM Obtener el código de los clientes que ha comprado más de 2 tarjetas de red
 
SELECT ID_CLI FROM COMPRAS 
WHERE ID_ART = '0003'
AND NUM_UNID > 2;
 
#REM Obtener el código de los clientes que ha comprado algún artículo posterior al 31/10/06
 
SELECT DISTINCT ID_CLI FROM COMPRAS 
WHERE FEC_COMPRA > '31/10/06';
 
#REM Obtener una consulta en la que aparezca el nombre y teléfono de los clientes que han comprado un monitor TFT
 
SELECT CLIENTE.NOMBRE, CLIENTE.TLF
FROM CLIENTE, COMPRAS  
WHERE CLIENTE.COD_CLI = COMPRAS.ID_CLI
AND COMPRAS.ID_ART = '0006';
 
#REM Obtener un listado agrupado por cliente y el número total de artículos adquiridos por éste 
 
SELECT ID_CLI, SUM(NUM_UNID) "Total artículos"
FROM COMPRAS 
GROUP BY ID_CLI;
 
#REM Obtener el precio medio de venta de los artículos de la empresa
 
SELECT AVG(PRECIO) "Precio medio venta"
FROM ARTICULO;
 
#REM Obtener el número medio de unidades vendidas de los artículos
 
SELECT AVG(NUM_UNID) "Nºmedio unidades vendidas"
FROM COMPRAS;
 
#REM Obtener un listado con el número de unidades adquiridas de cada artículo
 
SELECT ID_ART, SUM(NUM_UNID) "Tot. unid. vendidas"
FROM COMPRAS 
GROUP BY ID_ART;
 
#REM Obtener el número medio de unidades vendidas por cliente
 
SELECT AVG(NUM_UNID) "Nºmedio unid/cliente"
FROM COMPRAS
GROUP BY ID_CLI;
 
REM Obtener un listado con el nombre del cliente y la denominación de los artículos que ha 
REM adquirido
 
SELECT CL.NOMBRE, AR.DENOM
FROM CLIENTE  CL, ARTICULO  AR,  COMPRAS   CO
WHERE CO.ID_CLI = CL.COD_CLI 
AND CO.ID_ART = AR.COD_ART;
 
#REM Obtener el código del cliente que más unidades ha adquirido de algún artículo 
 
SELECT ID_CLI
FROM  COMPRAS
WHERE NUM_UNID = (SELECT MAX(NUM_UNID) FROM COMPRAS);
 
 
#REM Obtener el nombre del cliente que más unidades ha adquirido de algún artículo 
 
SELECT CL.NOMBRE
FROM  CLIENTE  CL,  COMPRAS  CO
WHERE CO.NUM_UNID = (SELECT MAX(NUM_UNID) FROM COMPRAS)
AND   CO.ID_CLI = CL.COD_CLI;
 
#REM Obtener eL código de los clientes que han adquirido más de 2 artículos
 
SELECT ID_CLI, SUM(NUM_UNID)
FROM COMPRAS
GROUP BY ID_CLI
HAVING SUM(NUM_UNID) > 2;
 
 
REM Obtener el nombre de los clientes que han adquirido más de 2 artículos
 
SELECT DISTINCT CL.NOMBRE
FROM  COMPRAS  CO,  CLIENTE  CL
WHERE CL.COD_CLI IN
   (SELECT ID_CLI FROM COMPRAS 
    GROUP BY ID_CLI
    HAVING SUM(NUM_UNID) > 2);
 
#REM Obtener el nombre de los clientes que han adquirido más artículos que la media
 
SELECT DISTINCT CL.NOMBRE
FROM COMPRAS  CO,  CLIENTE  CL
WHERE CL.COD_CLI IN
   (SELECT ID_CLI FROM COMPRAS 
    GROUP BY ID_CLI
    HAVING SUM(NUM_UNID) > 
    (SELECT AVG(NUM_UNID) FROM COMPRAS)
    );

Diagrama de Estado UML | Ejemplo Resuelto

Un Diagrama de Estados representa una máquina de Estados que recoge la secuencia de estados por las que pasa un objeto a lo largo de su vida en respuesta a eventos, junto con dichas respuestas.
Un estado es una situación en la vida de un objeto en la que satisface cierta condición, realiza alguna actividad o espera algún evento.
Un evento es la especificación de un acontecimiento significativo que ocupa un lugar en el tiempo y en el espacio. Es la aparición de un estímulo que puede (o no) activar una transición de estado.
Una transición es una relación entre dos estados que indica que un objeto que esté en el primer estado realizará ciertas acciones y entrará en el segundo estado cuando ocurra un evento especificado y se satisfagan unas condiciones especificadas.
Los estados se obtienen de las clases en las que existen objetos que cambian de estado a través del tiempo y se identifican a partir del Diagrama de clases.
Por tanto, la generación de un diagrama de estados tiene sentido si las instancias de una clase tienen un comportamiento que depende de su historia o que debe responder a eventos externos (objetos reactivos) y está indicado para el Análisis mediante el Modelo basado en Comportamiento.

Definiremos tres conceptos que nos ayudarán a entender los diagramas de estados:

Acontecimiento: todo aquello que requiere la respuesta del sistema software.
Estado: condición de un objeto o de un caso de uso en un momento del tiempo.
Transición: cambio de estado como consecuencia de un acontecimiento.

A continuación se muestra un ejemplo de diagrama de estados para el diagrama de clases dado:

Diagrama de Estados UML ejemplo Resuelto

Diagrama de Estados UML ejemplo Resuelto

El punto negro marca el estado inicial, y es por donde empieza a leerse el diagrama de estados.

Cada estado se representa con un globo y un nombre.

La flecha que une dos estados se llama transición.

Cada transición lleva asociado un nombre, que determina el acontecimiento que hace que se produzca dicha transición.

Uso de los diagramas de estados

Los diagramas de estados se pueden especificar para:

  • Una clase objetos:
    • Para describir por qué los objetos cambian de subclase.
    • Las subclases de un diagrama de estados no tienen por qué aparecer explícitamente en el esquema conceptual (diagrama de clases).
    • Para describir clases de objetos que presenten un importante comportamiento dinámico.
  • Casos de uso:
    • Para describir la secuencia legal en la que los acontecimientos se pueden producir en el mundo real.

 

Puedes Descargar el Diagrama de Estado UML Ejemplo Resuelto   en su Versión Word

 

Diagrama de Secuencias UML | Ejemplos Resueltos

Definición de Diagrama de Secuencias UML

Los diagramas de secuencia modelan la secuencia lógica a través del tiempo de los mensajes entre instancias. Se podría definir como la pila de llamadas resultante de realizar las diferentes operaciones, forman un mapeado de la traza de llamadas que se realizan cuando un participante realiza una acción.

El diagrama de secuencia se estructura mediante líneas de vida, que a su vez representan a un participante en el sistema, ya sea un actor o cualquier otro elemento que participe en el transcurso secuencial de nuestro programa. La parte más importante del diagrama es la línea de vida, esa línea representa una secuencia, una cronología que nos permite visualizar con un rápido vistazo las interacciones, mensajes y participantes, así como el número de ellos a través de toda la vida del programa, desde que se ejecuta hasta que se cierra. Como ya hemos comentado, en el diagrama de secuencia se visualizan los diferentes mensajes que se realizan entre los objetos, éstos pueden ser de dos tipos:

  • Síncronos: se corresponden con llamadas a métodos del objeto que recibe el mensaje. El objeto que envía el mensaje queda bloqueado hasta que termina la llamada. Este tipo de mensajes se representan con flechas con
    la cabeza llena.
  • Asincronos: estos mensajes terminan inmediatamente, y crean un nuevo hilo de ejecución dentro de la secuencia. Se representan con flechas con la cabeza abierta. Al igual que los mensajes síncronos, también se representa la respuesta con una flecha discontinua.
PASOS PARA LA CONSTRUCCIÓN DE UN DIAGRAMA DE SECUENCIA
  • Identificar actores relacionados: Los detalles acerca de los actores y las acciones de procesos en donde participan se hicieron a través de su actividad.
  • Identificar actores iniciadores: Para cada secuencia se debe reconocer el actor que dispara o inicia la actividad.
  • Identificar el intercambio entre actores: Ya que se identificó el inicio de la secuencia, se requiere describir las actividades subsecuentes. Para cada paso en la interacción es debido identificar qué información es intercambiada, con esto se establecen los mensajes entre objetos.

Un mensaje son peticiones realizadas hacia un actor (objeto) en particular.

 

4 ACTOR: Representa los actores en la Interacción

 

3LINEA DE VIDA: Representa de forma vertical el tiempo de vida del actor.

 

 2TIEMPO: Es el periodo en el cual un actor se involucra en una interacción (actividad).

 

1    MENSAJE: Es la petición de acción hacia otro objeto, se puede anotar los argumentos o    información que acompaña al mensaje.

 

Enunciado del Ejercicio de Diagrama de Secuencia

 

Un ejemplo simple de un diagrama de secuencia es el proceso de verificar un boleto de pasaje en un aeropuerto.

Diagrama de secuencias uml

Aquí podemos observar:

  • Los actores involucrados: Pasajero (disparador) y los servicios de pasaje.
  • Los tiempos de vida, acción: Solamente hay una interacción, en donde se manejan el mismo tiempo de vida.
  • Mensajes: Se indica la acción y el parámetro (pasajero – servicios); y el valor de regreso.

 

Puedes descargar este artículo en Documento de Word Diagrama de secuencia ulm resuelto

Crear Base de Datos desde Comienzo al Final

GESTIÓN DE PROYECTOS INFORMÁTICOS

Una empresa de consultoría desea crear una base de datos para facilitar la gestión de los proyectos informáticos que desarrolla para sus empresas clientes. Los requisitos que hay que recoger se muestran a continuación:
La empresa desarrolla proyectos de los que se almacena su código, nombre, cliente para el que se desarrolla el proyecto, una breve descripción, presupuesto, número de horas totales estimadas, fechas de inicio y fechas de fin.
Cada proyecto se compone de una serie de fases identificadas por un número en secuencia en cada proyecto. Cada fase se caracteriza, además, por su nombre, fecha de comienzo, fecha de fin y estado en que se encuentra (en curso o finalizada).
Los empleados de la empresa (código, DNI, nombre, dirección, titulación y años de experiencia) están asignados a los proyectos que desarrolla la empresa. Interesa almacenar los empleados que son jefes de proyecto junto con su dedicación total en horas prevista a cada proyecto así como el coste de su participación en euros, teniendo en cuenta que cada proyecto lo lidera un único jefe de proyecto.
En cuanto a los informáticos que participan en los proyectos, se quiere conocer los que son analistas y los que son programadores, así como el número de horas totales previstas dedicadas en cada proyecto y el coste en euros que supone cada dedicación. De los programadores se almacenarán también los lenguajes en los que son expertos.

ANÁLISIS Y DISCUSIÓN DEL ENUNCIADO

Primeramente pasamos a identificar dos entidades Proyecto y Fase. Cada Fase se corresponde con un proyecto, ademas como cada Fase se identifica por un número de secuencia dentro del proyecto al que pertenece, se trata de una dependencia en identificación.
Con relación a los atributos, en PROYECTO, se debería comprobar que la fecha de fin de un proyecto es superior a la fecha de inicio del mismo. De igual manera, las horas estimadas por proyecto no deben exceder el número total de horas que resulta de restar las fechas de fin e inicio. En cuanto a FASE, además de comprobar que la fecha de fin sea posterior a la fecha de inicio, hay que tener en cuenta que los intervalos de fechas estén incluidos en el intervalo compuesto por la fecha de inicio y la fecha de fin del proyecto y que la suma de todas las fechas correspondientes al conjunto de fases de un determinado proyecto, no exceda la fecha de finalización del mismo. Con referencia al estado de cada fase, éste será un atributo que tomará valores en el dominio {en curso, finalizada}. Por último, se podría suponer que el nombre de los proyectos es un atributo AIA, pues habitualmente estos son únicos.

Seguidamente se describen los tipos de empleados que participan en los proyectos. Estos pueden ser jefes de proyecto o informáticos y además los informáticos pueden ser analistas o programadores con lo que se tiene una jerarquía a dos niveles. Se puede considerar que en la empresa hay más tipos de empleados aunque no sean relevantes en el dominio que se está modelando, por lo que la jerarquía EMPLEADO será parcial pero sin solapamiento, pues un jefe de proyecto no es un informático ni viceversa. De esta manera, el atributo discriminante Tipo tomará valores en el conjunto {jefe proyecto, informático, null}. En cambio, como los informáticos solo son de dos tipos, analistas o programadores, la jerarquía INFORMÁTICO sí es total y también sin solapamiento, con lo que su atributo discriminante Tipo tomará valores en el conjunto {analista, programador}. Como los empleados tienen un código de empicado y también se desea recoger su DNI, ser puede considerar el primero como atributo AIP y el segundo como AIA.
Interesa almacenar el liderazgo de los proyectos, así como la dedicación en horas y el coste total de los jefes de proyecto, por tanto se debe crear una interrelación Dirigido entre PROYECTO y JEFE PROYECTO. Como cada proyecto es liderado por un único jefe de proyecto, pero un jefe puede liderar varios proyectos, la interrelación será 1:N. Además deberá llevar dos atributos Suma horas y Coste total, debiendo comprobarse adicionalmente que el número de horas”no exceda en ningún caso del cómputo de las horas resultante de restar las fechas de fin e inicio de cada proyecto. Al igual que con los jefes de proyecto, se desea almacenar la relación existente entre los proyectos y los empleados informáticos, almacenando también las horas totales de dedicación y el coste. Todo ello se refleja en la interrelación N:M Trabaja entre INFORMÁTICO y PROYECTO, debiendo hacerse las comprobaciones pertinentes en los atributos. Por último resaltar que de los programadores se desea recoger los lenguajes en los que son expertos, esto se debe recoger con un atributo multivaluado “Lenguajes”, para dar la posibilidad de que haya más de uno. Será necesario comprobar de forma adicional que el presupuesto de un determinado proyecto nunca puede ser inferior a la suma de todos los costes derivados de sus empleados.
Se podría haber pensado en la posibilidad de, en lugar de definir las interrelaciones Trabaja y Dirigido, crear una única interrelación directamente entre la entidad EMPLEADO (el super tipo de la jerarquía) y la entidad PROYECTO. Esta decisión sería válida, pero representa menos semántica en el diagrama E/R. En el caso de tener una única interrelación, sería necesario comprobar adicionalmente a lo comentado en el apartado anterior que para cada Proyecto existe al menos uno y solo un jefe de proyecto trabajando en el mismo. También seria necesario comprobar que al menos un informático también esta trabajando en cada proyecto.

DIAGRAMA DE ENTIDAD RELACIÓN

 

proyecto base de datos completo
Diagrama entidad relación

Fase es débil de Proyecto en Identificación.

Para la elaboración del Diagrama hemos utilizado Microsoft Visio Profesional 2013.

MODELO RELACIONAL a partir de la entidad relación

 

Gestion de PROYECTOS INFORMATICOS

CREAMOS LA BASE DE DATOS CON SQL-FRONT

#Creamos la base de datos y el usuario
CREATE DATABASE CPROY_BD3;
USE CPROY_BD3;  
 
#Empleados 
CREATE TABLE IF NOT EXISTS EMPLEADOS(
cod_empleado INT(3),
DNI NUMERIC(8) NOT NULL,
nombre VARCHAR(25) NOT NULL,
titulacion VARCHAR(25) NOT NULL,
experiencia VARCHAR(25) NOT NULL,
direccion VARCHAR(25) NOT NULL,
tipo VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(cod_empleado));
INSERT INTO EMPLEADOS  VALUES ("001", "51228102", "Luis", "DAM", "01","Avenida America 119", "Jefe_PROY");
INSERT INTO EMPLEADOS  VALUES ("002", "51228103", "Antonio", "DAW", "02","Calle odonnell 51", "Informatico");
INSERT INTO EMPLEADOS  VALUES ("003", "51228104", "Juan","ASIR","03","Calle Beniferri 16", "Informatico");
INSERT INTO EMPLEADOS  VALUES ("004", "51228105", "Maria", "INGENIERIA", "04", "Calle Serrano 92", "Jefe_PROY");
INSERT INTO EMPLEADOS  VALUES ("005", "51228106", "Javier", "DAI", "05", "Calle Alcala 88", "Informatico");
INSERT INTO EMPLEADOS  VALUES ("006", "51228107", "Ana", "ADE","06", "Calle Goya 20", "Informatico");
# Proyecto
CREATE TABLE IF NOT EXISTS PROYECTO(
Cproy VARCHAR(5),
Nombre VARCHAR(25) NOT NULL,
Descripcion VARCHAR(25) NOT NULL,
Fecha_Ini DATE NOT NULL,
Fecha_Fin DATE  NOT NULL,
Horas_Extraordinarias VARCHAR(25) NOT NULL,
Presupuesto VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (Cproy));
INSERT INTO PROYECTO VALUES("00001","INFOSYSTEM","Servicios Informaticos","2000-01-01","2001-01-01-","01","1000");
INSERT INTO PROYECTO VALUES("00002","ROBERTBLOG.NET","Pagina Web","2002-01-01","2005-01-01","02","2000");
INSERT INTO PROYECTO VALUES("00003","TECNOTEC","Desarrollo de Software","2002-02-09","2005-02-02-","03","3000");
INSERT INTO PROYECTO VALUES("00004","INFOTEC","Perifericos","2004-03-03","2009-03-03","04","4000");
INSERT INTO PROYECTO VALUES("00005","ROBERTSOFT","Software Libre","2005-04-04","2009-04-04","05","5000");
INSERT INTO PROYECTO VALUES("00006","IES BARAJAS","Instituto FP","2005-05-05","2006-05-05","06","6000");
 
#Jefes Proyecto
CREATE TABLE IF NOT EXISTS JEFES_PROYECTO(
cod_empleado INT(3),
CONSTRAINT PRIMARY KEY(cod_empleado));
ALTER TABLE JEFES_PROYECTO ADD CONSTRAINT FOREIGN KEY(cod_empleado) REFERENCES Empleados(cod_empleado) ON DELETE RESTRICT ON UPDATE RESTRICT;
INSERT INTO JEFES_PROYECTO VALUES("001");
INSERT INTO JEFES_PROYECTO VALUES("002");
INSERT INTO JEFES_PROYECTO VALUES("003");
INSERT INTO JEFES_PROYECTO VALUES("004");
INSERT INTO JEFES_PROYECTO VALUES("005");
INSERT INTO JEFES_PROYECTO VALUES("006");
 
#Informáticos
CREATE TABLE INFORMATICOS(
cod_empleado INT(3),
tipo VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(cod_empleado));
ALTER TABLE INFORMATICOS ADD CONSTRAINT FOREIGN KEY(cod_empleado) REFERENCES EMPLEADOS(cod_empleado) ON DELETE RESTRICT ON UPDATE RESTRICT;
INSERT INTO INFORMATICOS VALUES("001","Analista");
INSERT INTO INFORMATICOS VALUES("002","Programador");
INSERT INTO INFORMATICOS VALUES("003","Programador");
INSERT INTO INFORMATICOS VALUES("004","Analista");
INSERT INTO INFORMATICOS VALUES("005","Programador");
INSERT INTO INFORMATICOS VALUES("006","Analista");
 
# Programadores
CREATE TABLE PROGRAMADORES(
cod_empleado INT(3) NOT NULL,
CONSTRAINT PRIMARY KEY(cod_empleado));
ALTER TABLE PROGRAMADORES ADD CONSTRAINT FOREIGN KEY(cod_empleado) REFERENCES Empleados(cod_empleado) ON DELETE RESTRICT ON UPDATE RESTRICT;
INSERT INTO PROGRAMADORES VALUES("001");
INSERT INTO PROGRAMADORES VALUES("002");
INSERT INTO PROGRAMADORES VALUES("003");
INSERT INTO PROGRAMADORES VALUES("004");
INSERT INTO PROGRAMADORES VALUES("005");
INSERT INTO PROGRAMADORES VALUES("006");
 
#Expertos
CREATE TABLE EXPERTOS(
cod_empleado INT(3) NOT NULL,
lenguaje VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(cod_empleado));
ALTER TABLE EXPERTOS ADD CONSTRAINT FOREIGN KEY(cod_empleado) REFERENCES Empleados(cod_empleado) ON DELETE RESTRICT ON UPDATE RESTRICT;
INSERT INTO EXPERTOS VALUES("001", "PHP");
INSERT INTO EXPERTOS VALUES("002", "JAVA");
INSERT INTO EXPERTOS VALUES("003", "HTML");
INSERT INTO EXPERTOS VALUES("004", "C");
INSERT INTO EXPERTOS VALUES("005", "C++");
INSERT INTO EXPERTOS VALUES("006", "JAVASCRIPT");
#Dirigidos
CREATE TABLE DIRIGIDOS(
cproy VARCHAR(5),
cod_jefe CHAR(2) NOT NULL,
horas VARCHAR(25) NOT NULL,
coste VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (cproy));
ALTER TABLE DIRIGIDOS ADD CONSTRAINT FOREIGN KEY(cproy) REFERENCES PROYECTO(cproy) ON DELETE RESTRICT ON UPDATE RESTRICT;
INSERT INTO DIRIGIDOS VALUES("00001","AB","233","500");
INSERT INTO DIRIGIDOS VALUES("00002","AC","234","600");
INSERT INTO DIRIGIDOS VALUES("00003","AD","235","700");
INSERT INTO DIRIGIDOS VALUES("00004","BA","236","800");
INSERT INTO DIRIGIDOS VALUES("00005","BB","237","900");
INSERT INTO DIRIGIDOS VALUES("00006","BC","238","999");
# Fases
CREATE TABLE FASES(
cproy VARCHAR(5),
num_fase VARCHAR(25) NOT NULL,
nombre VARCHAR(25) NOT NULL,
fecha_i DATE NOT NULL,
fecha_f DATE NOT NULL,
estado VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY (cproy, num_fase)); 
ALTER TABLE FASES ADD CONSTRAINT FOREIGN KEY(cproy) REFERENCES PROYECTO(cproy) ON DELETE RESTRICT ON UPDATE RESTRICT;
INSERT INTO FASES VALUES("00001","20","ABCD", "2001-01-01","2008-01-01","En curso");
INSERT INTO FASES VALUES("00002","21","AACD", "2002-02-02","2009-02-01","En Curso");
INSERT INTO FASES VALUES("00003","22","ALSD", "2003-03-03","2010-03-01","Finalizada");
INSERT INTO FASES VALUES("00004","23","LSKD", "2004-04-04","2011-04-01","Finalizada");
INSERT INTO FASES VALUES("00005","24","EIEJ", "2005-05-05","2012-05-01", "En curos");
INSERT INTO FASES VALUES("00006","25","PPTR", "2006-06-06","2013-06-01","Finalizada");
#Trabajan
CREATE TABLE IF NOT EXISTS TRABAJAN(
Cproy VARCHAR(5) NOT NULL,
cod_empleado INT(5) NOT NULL,
num_horas VARCHAR(25) NOT NULL,
coste_total VARCHAR(25) NOT NULL,
CONSTRAINT PRIMARY KEY(Cproy));
ALTER TABLE TRABAJAN ADD CONSTRAINT FOREIGN KEY(cod_empleado) REFERENCES Empleados(cod_empleado) ON DELETE RESTRICT ON UPDATE RESTRICT;
ALTER TABLE TRABAJAN ADD CONSTRAINT FOREIGN KEY(Cproy) REFERENCES Proyecto(Cproy) ON DELETE RESTRICT ON UPDATE RESTRICT;
INSERT INTO TRABAJAN  VALUES("00001", "001", "30", "5000 Euros");
INSERT INTO TRABAJAN  VALUES("00002", "002", "40", "6000 Euros");
INSERT INTO TRABAJAN  VALUES("00003", "003", "50", "7000 Euros");
INSERT INTO TRABAJAN  VALUES("00004", "004", "60", "8000 Euros");
INSERT INTO TRABAJAN  VALUES("00005", "005", "70", "9000 Euros");
INSERT INTO TRABAJAN  VALUES("00006", "006", "80", "1000 Euros");

 

CREAMOS LAS CONSULTAS PARA PROBAR LA BD.

 

/*1. Crear un indice en la tabla empleados del campo codigo de empleado llamado CDE */
CREATE INDEX CDE ON cproy_bd.empleados (cod_empleado);
SHOW INDEX FROM cproy_bd.empleados; /*VER INDICES*/
DROP INDEX CDE ON cproy_bd.empleados; #Borrar indice creado
/*2.Crear un indice en la tabla Proyecto de todos los campos llamado TODOS */
CREATE INDEX TODOS ON proyecto (cproy, Nombre, Descripcion, Fecha_Ini, Fecha_Fin, Horas_Extraordinarias, Presupuesto);
SHOW INDEX FROM cproy_bd.proyecto;# Ver Indices
DROP INDEX TODOS ON cproy_bd; #Borrar indice creado
/*3. Crear en la tabla informaticos un nuevo campo llamado Nacionalidad -- despues borrarlo*/
 ALTER TABLE informaticos ADD Nacionalidad VARCHAR(25) NOT NULL;
ALTER TABLE informaticos DROP nacionalidad;
/*4- Obtener todos los campos de todos los empleados*/
SELECT * FROM empleados;
/*5. Obtener todos los campos de todos los empleados que tengan la titulacion de DAM. */
SELECT * FROM empleados WHERE titulacion='DAM';
/*6.Obtener los nombres de todos los empleados ordenadas alfabéticamente.*/
SELECT nombre FROM empleados ORDER BY nombre ASC;
/*7. Obtener el codigo de proyecto cuyo presupuesto mayores a 3000 euros*/
SELECT Cproy FROM proyecto WHERE presupuesto > 3000;
/*8. Crear un Join con la tabla empleados e informaticos (alias incluido)*/
SELECT *FROM cproy_bd3.empleados a, cproy_bd3.informaticos b WHERE a.cod_empleado= b.cod_empleado;
/*9. Obtener el dni de los empleados, el nombre, el codigo del empleado y el lenguaje en el lenguaje que son expertos*/
SELECT a.dni, a.nombre, b.cod_empleado, b.lenguaje
FROM cproy_bd3.empleados a, cproy_bd3.expertos b WHERE a.cod_empleado= b.cod_empleado;
/*10- Utilizar UN INNER JOIN-- Esta consulta hace lo mismo que el anterior*/
SELECT b.dni, b.nombre, p.cod_empleado, p.lenguaje FROM
   cproy_bd3.empleados b INNER JOIN cproy_bd3.expertos p ON p.cod_empleado = b.cod_empleado;
/*11- Contar el numero de empleados*/
SELECT COUNT(*) FROM cproy_bd3.empleados;
/*12- Mostrar el nombre de los Proyectos que terminen con la letra "t" */
SELECT * FROM cproy_bd3.proyecto WHERE nombre LIKE '%T'; 
/*13- Mostrar Proyectos Iniciados a partir de la Fecha 2002-02-02 hasta 2005-01-01*/
SELECT * FROM cproy_bd3.proyecto WHERE Fecha_ini BETWEEN '2002-02-02' AND '2005-01-01';
/*14- Mostrar Proyectos Finalizados despues del 2000*/
SELECT * FROM cproy_bd3.proyecto WHERE Fecha_Fin > '2000-01-01';
/*15- Seleccionar Codigo de Jefe de la tabla dirigidos cuyo coste sea de 999 y 238 horas */
SELECT cod_jefe, cproy, horas, coste FROM cproy_bd3.dirigidos WHERE coste='999' AND 
horas='238';

Captura de las consultas a la base de datos

 

2 4     8    12  14

 

HARDWARE NECESARIO

  • Sistema Operativo Microsoft Windows XP Home Edition o Superior
  • Procesador: Intel Core Duo T2250 (1,73 GHz /533 MHz FSB) o Superior
  • Memoria RAM: 1024 MB DDR2 SDRAM 533 MHz o Superior
  • Disco Duro:   120 GB SATA similar o Superior
  • Placa principal / Tipo conjunto de chips ATI RC410ME Similar o superior
  • Tipo de CPU   Dual Core Intel Core i2 o Superior

Software NECESARIO

Servidor de base de datos:

  • Tipo de servidor: MySQL
  • Versión del servidor: 5.6.21 – MySQL Community Server (GPL)
  • Versión del protocolo: 10
  • Conjunto de caracteres del servidor: UTF-8 Unicode (utf8)

Servidor Web:

  • Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.6.3 o Superior
  • Versión del cliente de base de datos: libmysql – mysqlnd 5.0.11-dev – 20120503 –
  • extensión PHP: mysqli