viernes, 16 de diciembre de 2011

sprint #4

Sprint 4

Foro de discusión sobre ética en la administración de sistemas (Mantención y administración de sistemas)

Autor: Felipe Leal
Competencia: Actuación Ética  (Nivel 1) 
Palabras Clave: administrador, ética, informacion, licencia






Los administradores de sistemas por su rol y privilegios poseen prácticamente acceso a toda la información de una empresa. 

¿ Cuáles son las responsabilidades éticas en la manejo de la información ?

¿ Es posible poder determinar un marco ético informático ?




-Las responsabilidades del administrador, pasan ahora a otro plano, adquiere un nuevo deber, por así decirlo, debe ser también responsable por el cuidado de la información que esta manejando.
 me refiero a que obviamente el administrador debe ser integro y no hacer uso de sus facultades que le permiten examinar toda la información, si no que limitarse a lo relevante y lo que no pase a llevar la libertad de otra persona.

- El marco ético no es posible determinarlo, porque siempre estará a voluntad de alguien mas, acceder o no a tal información, pero si se puede hacer un marco legal, o un acuerdo de que información será accesada por el administrador; de ahí a que se respete es otro tema.
 Considero que estas preguntas están derechamente relacionadas con la siguiente. No podemos pretender que nuestra información este resguardada y se respeten nuestras libertades, si muchas veces utilizamos software privativo que no nos dice que se hace con la información y muchas veces tiene puertas traseras que están hechas derechamente para espiar.

viernes, 9 de diciembre de 2011

Bonus Point 5 Subir ejemplo de Excepciones propias. (Desarrollo de Aplicaciones Cliente Servidor)

Autor: Felipe Leal
Competencia: Creatividad e Innovación  (Nivel 1) 
Palabras Clave: Net Beans, SQL, Excepciones







Descripción: Se han presentado en clases los elementos básicos relacionados con Excepciones en Java y complementariamente se ha publicado documentación vinculada con Excepciones que pueden ser definidas por el programador. Además se ha publicado un ejemplo (Ejemplo: Excepciones propias), donde se programó una excepción definida para un problema particular. En las presente actividad se busca que el estudiante revise este ejemplo y lo programe como parte de las actividades de aprendizaje.
Objetivo: Se espera que el estudiante evidencie haber revisado y programado el ejemplo en Netbeans.
Tiempo: 30 minutos cronológicos.
Actividades de Apropiación.
  • Descarga y visualización del Ejemplo: Excepciones propias.
  • Programación del ejemplo en un proyecto en Netbeans.
  • Generación de un documento en PDF con el código fuente del ejemplo Excepciones Propias. Al final del documento debe ir una captura de pantalla, mostrando la ejecución del código en Netbeans.
  • El documento debe tener una portada con el titulo del Bonus Point, fecha de entrega, nombre del alumno (Bonus Point sin nombre no serán contabilizados), tipo de letra Arial de tamaño 12, títulos con tamaño de fuente 14 y en negrita, finalmente subtítulos solo en negrita (tamaño 12).
  • Subir el documento a la plataforma antes de la fecha especificada.

    Evaluación: Esta actividad será evaluada como un Bonus Point. Una actividad Bonus Point genera puntos que se sumarán a la nota final lograda en las evaluaciones establecidas. El completar 100% de las actividades Bonus Point sumará a la nota final un punto (1.0), es decir, si la nota final es un 5,6 y el estudiante ha cumplido con el 100% de las actividades Bonus Point, su nota final será de 6,6 (eso siempre con el máximo de 7,0). Si el porcentaje de cumplimiento es menor, los Bonus Point serán proporcionales, por ejemplo, 20% equivale a 0,2 Bonus Point.
    También existen instancias que restan Bonus Point, relacionadas con el trabajo en clases, es decir, si el alumno de alguna forma demuestra no trabajar en clases, se le restarán Bonus Point del total presentado a fin de semestre, donde la cifra puede ser negativa, lo que significa restar al promedio proporcionalmente. Ejemplo: el tener 2 Bonus Point negativos (no presento ningún Bonus Point y además tiene en contra) de un total de 20, significará una disminución del promedio en un 2%, entonces si la nota final es un 4,0, esta disminuye a 3,92, por lo tanto, reprueba el ramo.








BP5_FelipeLeal

Tantos Mundos (Proyecto Cristiano: La vida)

Autor: Felipe Leal
Competencia: Trabajo en Equipo (Nivel 2) 
Palabras Clave: Cristiano, Dios, Tantos Mundos


SEGUNDA ETAPA DEL TERRENO: RECORRIDO POR EL SECTOR DEL CENTRO DE LA CIUDAD.
Momento No1.
Partida desde la Plaza de Armas de la ciudad. Es interesante la propuesta simbólica del monumento que está al centro de ésta. Es un monumento que quiere representar muchas cosas, algo de la historia de la Región, la preeminencia del Pueblo Mapuche, un mensaje de género y también elementos religiosos. Hagan un primer análisis de lo que el monumento les evoca a ustedes, los significados que descubren en él. Si es posible pregúntenles a las personas que están el lugar si saben algo sobre lo que el monumento significa.
Aparece en él la figura de una Machi, que es un personaje religioso fundamental en la cultura mapuche.
Momento No2
Contemplen la catedral desde fuera, miren lo imponente que resulta, miren el edificio campanario, como en el caso anterior analicen lo que les evoca a ustedes, los significados que descubren al observar. Ingresen a la catedral, háganlo en silencio, con respeto, puede haber personas orando, sean respetuosos. Observen los elementos estéticos presentes en ella, sobre todo a las personas, los estilos de vida que ello les evoca.
Momento No3.
Estamos en el centro comercial de la ciudad: Acerquémonos a uno de los bancos o al Servipag que está cerca de la esquina de Bulnes con Claro Solar, frente a la plaza por Bulnes. Contemplemos a las personas, sus rostros, sus prisas, sus preocupaciones. Intentémonos conectarnos con las vivencias de las personas, y los estilos de vida que se manifiestan en ellos. (Ejecutivos, empleados, pobladores, etc.)
page2image14648
page2image14920
Momento N°4// no logrado
Nos acercamos al edificio de la Logia Masónica, en Aldunate (entre Claro Solar y Montt), miraremos desde fuera la simbología, si es posible acercarse y conversar con alguien lo pueden hacer, si es posible ingresar también lo pueden hacer. Observen la simbología que el edificio presenta, como en el caso anterior analicen lo que les evoca a ustedes, los significados que descubren al observar. Continúen su investigación sobre este grupo en la Web.
Momento No5
Acérquense a alguna de las grandes tiendas del centro, también contemplen lo que hacen las personas, paséense por la tienda, observen lo que hacen, si es posible vayan también al lugar donde se pagan las tarjetas de crédito, observen sus rostros, actitudes, etc. comenten los estilos de vida que estas personas les evocan.
Momento N°7
Entren al mercado municipal, observen, conversen, continuando con la dinámica anterior, piensen en los estilos de vida de las personas, ¿Cuáles son sus prioridades, sus preocupaciones, etc.?...
Es optativo continuar con la dinámica, este mismo día u otro día, lo importante es que observen estilos de vida presenten la vida de las personas de la ciudad...


tantos MUNDOS

domingo, 13 de noviembre de 2011

Arreglo con Blue J(Programación 2)

Autor: Felipe Leal
Competencia: Gestion en TI (Nivel 1) 
Palabras Clave: BlueJ, Objetos



Crear dos clases:
- una que define diversos métodos para crear, llenar y manipular un arreglo unidimensional
- otra cuya única finalidad es invocar dichos métodos a fin de comprobar su correcto funcionamiento

La primera clase tendrá como nombre arrUni, la segunda tendrá como nombre usarrUni

La clase arrUni deberá poseer los siguientes métodos:
- constructor, recibe como parámetro la dimensión del arreglo
- llenaAleatorio, recibe un lí­mite inferior y uno superior para el rango aleatorio y entonces llena el arreglo con valores aleatorios entre esos límites
- muestra, que muestra el contenido del arreglo en una fila de pantalla
- invierte, que invierte el contenido del arreglo
- suma, que entrega la suma de todos los elementos del arreglo
- busca, que recibe un entero y entrega verdadero o falso, según si está o no en el arreglo
- menor, que entrega el menor valor contenido en el arreglo
- mayor, que entrega el mayor valor contenido en el arreglo
- hayRepetidos, que entrega verdadero o falso, según si hay o no elementos repetidos

Subir proyecto.

CLASE ARREGLO


public class ARREGLO
{
    private int N;
    private int M[];
    
    public ARREGLO(int n)
    {
        this.N=n;
        this.M = new int [N];
    }
    
    public void llenaAleatorio(int lbajo, int lalto)
    {
        for(int i=0; i<N; i++)
        {
            M[i]=lbajo + (int)(Math.random()*(lalto-lbajo+1));
        }   
    }
    
    public void mostrar()
    {
        System.out.print("arreglo");
        for(int i=0; i<N; i++)
        {
         System.out.print(" - " + M[i]);   
        }    
        System.out.println();
    }  
    
    
    public int suma()
    {
        int suma =0;
        for (int i=0; i<N; i++)
        {
        suma = suma+M[i];
        }
        return suma;
    }   
    
    public void mostrarinverso()
    {
        System.out.print("inverso");
        for(int i=0; i<N; i++)
        {
         System.out.print(" - " + M[N-1-i]);   
        }    
        System.out.println();
    }  
    
    public void buscar(int busca)
    {
        int verdad=0;
        for(int i=0; i<N; i++)
        {
            if(M[i]==busca)
            {
                verdad++;
            }
        }
        if(verdad>0)
            {
                 System.out.println("VERDADERO   El Numero: "+busca+" Se encuentra en el arreglo");
            }    
            else
            {
                 System.out.println("FALSO   El Numero: "+busca+" NO Se encuentra en el arreglo");
            } 
        System.out.println();       
    }  
    
    
    public int menor()
    {
        int menor = M[1];
        for(int i=0; i<N; i++)
        {

            if(M[i] <= menor)
            {
                menor=M[i];
            }
        }    
        return menor;
    }    

    public int mayor()
    {
        int mayor= M[1];
        for(int i=0; i<N; i++)
        {
            if(M[i] >= mayor)
            {
                mayor=M[i];
            }
        }
        return mayor;
    }        
    
    public void repetidos()
    {
        int repete=0;
        for(int i=0; i<N; i++)
        {
         for(int j=i+1; j<N; j++)   
         {
            if(M[i]==M[j])
            {
                repete++;    
            }
         }    
        }
        if(repete>0)
        {
            System.out.println("Hay repetidos");       
        }    
        else
        {    
            System.out.println("No Hay repetidos");          
        }   
    }    
}



CLASE USA ARREGLO



public class USA_ARREGLO
{
    public static void main(String args[])
    {
        ARREGLO miarreglo = new ARREGLO(10);
        miarreglo.llenaAleatorio(10,90);
        miarreglo.mostrar();
        miarreglo.mostrarinverso();
        System.out.println("la suma de sus elementos es "+ miarreglo.suma() );
        
        miarreglo.buscar(82);
        
        System.out.println("El Menor de Los numeros del Arreglo Es: "+ miarreglo.menor() );
        
        System.out.println("El Mayor de Los numeros del Arreglo Es: "+ miarreglo.mayor() );
        
        miarreglo.repetidos();
    }
}




Proyecto #2(Proyecto Robótica)

Autor: Felipe Leal
Competencia: Gestión en TI(Nivel 2) 
Palabras Clave: NXT,



PROYECTO #2

Objetivo
Manejar las estructuras de datos Arreglos (Arrays) y Archivos, y manejo de tareas concurrentes.

Descripción
Cada grupo deberá contextualizar una situación de uso del robot NXT, donde la solución considere fuertemente el uso de arreglos y archivos.
Para ello, las etapas contempladas en este proyecto son:
  • Elaboración de la idea: Cada grupo deberá escribir un documento que describa su proyecto, dejando claramente establecido el contexto y cómo se aplicarán los arreglos y archivos. (Puede usar como guía los enunciados de proyectos anteriores de este curso y de Prog. de Robots).
  • Validación de la idea: El martes 11 de octubre en clases, los profesores conversarán con cada grupo de modo de colaborar en la elaboración de la idea y validarla, realizando una retroalimentación frente a cada propuesta de proyecto. Los grupos subirán como respuesta a esta "Tarea" el documento con el proyecto del grupo (plazo miércoles 12 de octubre).
  • Implementación del proyecto: Considerando la retroalimentación dada, el grupo implementa el proyecto.
  • Presentación: Los proyectos deberán ser presentados el día viernes 28 de octubre, a las 15.00 hrs.

Bono adicional
El uso de la tecnología Bluetooth permitirá tener un bono adicional en su calificación. Para ello deberán trabajar dos grupos en conjunto de a cuerdo a las especificacioens dadas originalmente, asumiendo el trabajo adicional que implica (programación, informe detallado, etc.).





Grupo: DIRTY-BOT

Integrantes:
Angel Aedo
Martin Berkhoff
Felipe Leal
(Claudia de la Hoz) en conversaciones.

Proyecto 2: Robot Guardia


¡MacGyver Debe Salir De La Ciudad! Pero no cuenta con sistema de seguridad alguno que permita cuidar de su propiedad.
Provisto solamente de su Kit NXT y un teléfono Android , se dispuso a crear un sistema que en todo momento resguarde puertas, ventanas y pasillos y le mantenga informado del estado de su hogar.

IMPLEMENTACIÓN

Simularemos una casa y sus accesos mas comunes en una pequeña maqueta creada para el proyecto.

Cada vez que algún sensor (de los implementados) detecte algo anormal, el brick creará un reporte (que se guardara en un archivo) y utilizando tecnología bluetooth se comunicará con el teléfono, el cual, según sea el caso realizara las acciones necesarias para comunicarse con el Usuario:

-Captura de Fotografía
-Envío de Email
-Envío de SMS
-Llamada telefónica (con fin informativo).


También Se utilizaran funciones mecánicas para simular la presencia de alguna persona en el inmueble.

El Uso de arreglos es fundamental para crear un reporte con los datos obtenidos por cada sensor y tener un estado de alerta consecuente a la situación.

Los Sensores a Implementar Son:

-UltraSonido
-Tacto
-Sonido
-De luz (Siempre que encontremos un uso significativo para el).




Introducción
. Dirty Lock, el nuevo sistema de seguridad; que con su novedosa tecnología mantendrá seguras nuestras viviendas, aplicando novedosas tecnologías: app inventor, bluetooth, lego mindstorm , programación en nxc y twitter. Una nueva herramienta que nos permitirá dejar una de las más comunes de las preocupaciones: la seguridad de nuestras viviendas.
. El desarrollo de este sistema de seguridad fue pensado de manera estricta y rigurosa para que bajo ningúna circunstancia se pueda vulnerar la seguridad de nuestros hogares.

¿Cómo logramos esto?:

. Hacer un sistema de seguridad de este tipo toma tiempo; pero aquí podrán ver el proceso, paso a paso de la creacion del sistema de seguridad DIRTY LOCK.

Estrategia de Trabajo

. Al comenzar el Proyecto tuvimos la claridad de lo que queríamos hacer como proyecto, esto nos llevó como grupo a dividir las funciones: Felipe Leal, a cargo de crear la aplicación en app inventor; Angel Aedo la tarea de hacer la programacion en nxc del robot, y la creacion de archivos. Martin berkhoff quedo como staff de apoyo ayudando en todas las tareas que los compañeros requirieran.
. Lo primero, luego de dividir el trabajo, fue pensar en las tecnologías que tenemos a nuestro alcance para poder hacer un eficiente sistema de seguridad.
. Aquí seleccionamos básicamente cuatro tecnologías, sin contar los sensores: twitter, bluetooth, app inventor y lenguaje nxc.
¿Por qué no otras tecnologías?
. Simpemente porque en el momento consideramos que éstas eran suficiente para poder crear un sistema de seguridad efectivo; lo que no quita que exploremos con nuevas tecnologias más adelante.
. Con esta primera selección tuvimos lo básicos para iniciar el software en app inventor.
. App Inventor: Es una parte de Google Labs, un parque infantil para lo ingenieros de Google y aventureros usuarios de Google, con este programa para celulares Android es posible crear muchos tipos de aplicaciones; Con app inventor es posible crear aplicaciones que quedaran guardadas en la nube.
. Para mas informacion ir a esta pagina http://www.appinventor.es/ aquí encontraran video de presentacion, tutoriales y manual de como descargar app inventor.




. Creacion de el software en app inventor:






.
La aplicación que logramos hacer pudo conectarse con el nxt via bluetooth y coordinar acciones mediante sensores. Esta es la base de la aplicación, cada ves que cualquier tipo de sensor detecta algo, la aplicación enviaba un twitter dando cuenta de que el sensor estaba activo, este también podia llamar a la persona dueña del hogar si esto era necesario; o si el nivel de alarma que marcaron los sensores era demasiado alto.
. El uso de los sensores está especificado en el anexo de lego mindstorm. Como también la programación en nxc.



. En paralelo nuestro sistema de seguridad utilizando las tecnologias: Lego mindstorm y programacion en nxc, registra y genera un archivo de todas las actividades sospechosas que ocurren en el transcurso de la noche o en el tiempo que el usuario considere dentro de su hogar, ya sea forzar la puertas o ventanas, movimientos dentro de su casa y sonidos sobre lo normal. 

. Uso de sensores: Utilizamos del quit de legos mindstorm los siguientes sensores: Sensor de Sonido, encargado de detectar los sonidos que sean poco comunes. Sensor tacto, este cuida las puertas y ventanas del hogar y también verifica si estas se abren. Sensor Ultrasonido, encargado de ver si algo se mueve dentro de el hogar.

. Motor: aquí utilizamos un motor con una función única y específica, en el anexo maqueta se dejará más en claro esa parte.


Pseudocódigo

Subrutina TraspasaArchivo()
{
. . . Crear Archivo "Reporte.txt"
. . . Escribe linea "Reporte"
. . . Escribe linea "------------------"
. . . Si(Evento=2)
. . . {
. . . . . . Almacena "puerta"
. . . }
. . . Si(Evento=3)
. . . {
. . . . . . Almacena "ventana"
. . . }
. . . Si(Evento=1)
. . . {
. . . . . . Almacena "ruido"
. . . }
. . . Si(Evento=4)
. . . {
. . . . . . Almacena "movimiento"
. . . }
. . . Escribe linea Almacena, Tiempo
. . . Cierra Archivo
. . . Detiene Todas las Tareas
}

Subrutina Arreglos(x, y)
{
. . . almacena x en arreglo1
. . . almacena y en arreglo2
}

tarea conexion()
{
. . . mientras(verdad)
. . . {
. . . . . . ver estado bluetooth()
. . . . . . si(estado = activado desconectado)
. . . . . . {
. . . . . . . . . Tocar sonido
. . . . . . }
. . . . . . si(estado = activado conectado)
. . . . . . {
. . . . . . . . . Mostrar mensaje pantalla
. . . . . . }
. . . }
}

tarea sonido()
{
. . . mientras(verdad)
. . . {
. . . . . . si sensorSonido>sonido
. . . . . . {
. . . . . . . . . toma tiempo
. . . . . . . . . subrutina arreglo()
. . . . . . }
. . . }
}

tarea tacto1()
{
. . . mientras(verdad)
. . . {
. . . . . . si Sensor tacto se activa
. . . . . . {
. . . . . . . . . toma tiempo
. . . . . . . . . subrutina arreglo()
. . . . . . }
. . . }
}

tarea tacto2()
{
. . . mientras(verdad)
. . . {
. . . . . . si Sensor tacto se activa
. . . . . . {
. . . . . . . . . toma tiempo
. . . . . . . . . subrutina arreglo()
. . . . . . . . . mover interruptor 1 vez
. . . . . . }
. . . }
}

tarea movimiento()
{
. . . mientras(verdad)
. . . {
. . . . . . si SensorUS < Distancia
. . . . . . {
. . . . . . . . . toma tiempo
. . . . . . . . . subrutina arreglo()
. . . . . . }
. . . }
}

tarea main()
{
. . . Comenzar tareas()
}. . . 

. . . 
Código

Conclusión

El presente trabajo nos ha permitido implementar un sistema de seguridad, mediante la utilización de herramientas de la informática como lo son : app inventor, lenguaje nxc, bluetooth.
Para la creacion de una aplicación en android y la programacion en nxc.
Durante el proceso de investigacion fue necesario aprender sobre la creacion de archivos y arreglos en nxc y la programacion en app inventor. En este ultimo fue necesario buscar guias y tutoriales para poder aplicar una programacion adecuada a los requerimientos del equipo.
El trabajo en grupo no permitió avnazar sumando los aportes de cada uno de los integrantes, no obstante a medida que avanzabamos en el proceso se nos fueron presentando dificultades que nos llevaron a nuevas interrogantes, a la búsqueda de mayor información, a la consulta de nuevas fuentes de tal modo que el avanse se vio enrriquecido por el aprendizaje.
El resultado final de este proyecto, permite ver un sistema de Resguardo o de seguridad, funcionando a través de un equipo de tefelonía celular, con sistema Android en conjunto con la programación nxc y con la posibilidad de dar seguimiento de los eventos vía Twitter.















Evaluación 2, Parte 1 ( Introducción a las Tecnologías de la Información)

Autor: Felipe Leal
Competencia: Desarrollo de Software (Nivel 1)
Palabras Clave: Simuproc, Tecnología, Código.






Estimados:

Aquí deben entregar el código de 32 bits, que realice la siguiente acción:

Solicitar por teclado el diámetro de una circunferencia y calcular el área mostrando el resultado por pantalla.

Se espera que pongan comentarios en el código.

El formato de entrega es el código fuente en formato .asm.

Esta es la primera parte de la evaluación, estén atentos a la segunda parte.

PD: Para la segunda parte de la evaluación, recuerden que el código secuencial tiene menos puntaje.


RESPUESTA:
msg "Ingrese el Diametro De La Circunferencia"
in ax,1
stf 050;lo guarda en la memoria
ldf 050;carga el nummero de 32 bits
divf 030; lo divide en 32 bits
stf 055 ;lo guarda en la memoria
ldf 055 ; carga el numero
mulf 055 ;lo multiplica
stf 059
ldf 059
mulf 03A ; lo multiplica
stf 061 ; guarda el resultado
msg "El Area De La Circunferencia Es: "
out 1,ax
hlt

#030
0100000000000000
0000000000000000

#03A
0100000001001000
1111010111000010

Bonus Point Prueba 3 , capitulos 10 y 11 (Introduccion a los sistemas de bases de datos)




Autor:
 Felipe Leal

Competencia: Aplica las Ciencias de la ingeniería. (Nivel 1) 
Palabras Clave: datos, MySql, Bonus.


Con el Fin De Aumentar Las Notas Obtenidas en la 3ª prueba del semestre, se nos encomendo Realizar Varios Ejercicios de la guia vista durante el semestre, especificamente capitulos 10 y 11.




Ejercicios capitulo 10: outer joins, self-­‐joins, and unions




empleados ( NoEmpleado, Apellido, Nombre, FechaNacimiento, Sexo, Sueldo, IdDepto, Ciudad)
departamento( IdDepto, Nombre_depto, NoJefe, depto_control)
proyectos( Numero_proy, Nombre, Lugar, IdDepto)
rel_empleado_py ( NoEmpleado, Numero_proy)
carga_familiar ( Rut_carga, NoEmpleado, Nombre_carga, Sexo, FechaNacimiento, parentesco) relacion_empleado_interes (NoEmpleado, id_interes)
intereses (id_interes, nombre_interes)


Nota: cada departamento depende de otro departamento (unidad) que lo controla 
(Ejemplo: cCompras es controlado por el departamento de Finanzas). 
La clave foránea depto_control (auto-­‐referencia), guarda el id del departamento controlador.
 Existen departamentos que se controlan así mismos.


1) Muestre los departamentos que aun no tienen empleados.
select nombre_depto from departamento left join empleados using(idDepto)
where NoEmpleado is null;


2) Muestre los empleados que no tienen cargas familiares.
select nombre, apellido from carga_familiar right join empleados using(NoEmpleado)
where rut_carga is null;


3) Muestre una lista con los diferentes nombres que aparecen en la tabla empleados y carga_familiar.


select nombre from empleados union
select nombre_carga from carga_familiar;


4) Muestre todos los nombres (incluso los repetidos) que aparecen en la tabla empleados y carga_familiar, ordenados alfabéticamente.


select nombre from empleados union all
select nombre_carga from carga_familiar order by nombre;


5) Muestre un lista de nombres que están en la tabla empleados y la tabla carga_familiar


select nombre from empleados intersect
select nombre_carga from carga_familiar;


6) Muestre un lista de nombres que están en la tabla empleados y la tabla carga_familiar.


select nombre from empleados except
select nombre_carga from carga_familiar;


7) Muestre el rut y nombre de todas las personas, junto al rut y nombre de todas sus cargas familiares, incluso si no tienen cargas.


select * from empleados as e
full outer join carga_familiar as cf 
on e.NoEmpleado=cf.NoEmpleado;


8) ¿Qué departamento controla el departamento de “Finanzas”?


select * from departamento as sumiso
inner join departamento as controlador on (sumiso.depto_control = controlador.iddepto)
where controlador.nombre_depto = “Finanzas”;


9) ¿Qué departamentos controlan mas de un departamento?


select * from departamento as sumiso inner join departamento as controlador
on (sumiso.depto_control = controlador.iddepto) group by sumiso.Nombre_depto having count(sumiso.depto_control) >1;


10)¿Que departamentos se controlan así mismos?


select * from departamento as sumiso inner join departamento as controlador
on (sumiso.depto_control = controlador.iddepto)
where controlador.nombre_depto = sumiso.nombre_depto;



11) ¿Qué departamentos no controlan ningún departamento?


select * from departamento as s left join departamento as c
on (s.depto_control = c.iddepto) where s.iddepto is NULL;


12)Nombre todos los departamentos, que son controlados por departamentos cuyo nombre comienza con “a”.


select s.Nombre_depto from departamento as sumiso inner join departamento as controlador
on (sumiso.depto_control = controlador.iddepto) where controlador.nombre_depto like “a%”;


13)Existen versiones de MySql que no permiten trabajar con full outer join, por lo tanto cree una consulta que permita entregar un resultado igual a un full outer join sin utilizar directamente esta sentencia, utilizando las tablas empleados y carga_familiar.


SELECT * FROM empleados as e LEFT JOIN carga_familiar as cf
ON e.NoEmpleado = cf.NoEmpleado UNION
SELECT * FROM empleados as e RIGHT JOIN carga_familiar as cf
ON e.NoEmpleado = cf.NoEmpleado;



14)¿Que empleados aun no están trabajado en ningún proyecto?


SELECT * FROM empleados LEFT JOIN rel_empleado_py USING(NoEmpleado) WHERE Numero_Proy IS NULL;


15)¿De que personas aun no se conocen sus intereses?


SELECT * FROM empleados as e LEFT JOIN rel_empleado_interes as r
ON e.NoEmpleado=r.NoEmpleado WHERE r.NoEmpleado is NULL;


16)¿Cuales departamentos no están a cargo de ningún proyecto?


SELECT * FROM departamento as d LEFT JOIN proyectos as p USING (IdDepto) where p.IdDepto is null;


17)¿Qué empleados aun no están trabajado en ningún proyecto y no tienen cargas familiares?


SELECT * FROM empleados as e LEFT JOIN carga_familiar as cf USING(NoEmpleado) LEFT JOIN rel_empleado_py as r USING(NoEmpleado) WHERE (cf.NoEmpleado IS NULL) AND r.NoEmpleado 
IS NOT NULL;


18)¿Cuales departamentos no están a cargo de ningún proyecto y tampoco tienen empleados asignados?


SELECT d.Nombre FROM empleados as e RIGHT JOIN departamento as d USING(IdDepto) LEFT JOIN proyectos as p USING (IdDepto) WHERE (e.IdDepto IS NULL) AND p.IdDepto iS NULL;


19)Muestre los nombres de empleados que trabajan en el departamento de “Informática”, pero que actualmente no están asignados a ningún proyecto.


SELECT e.Nombre FROM empleados as e LEFT JOIN departamento as d ON (e.IdDepto = d.IdDepto) LEFT JOIN rel_empleado_py as r ON(r.NoEmpleado = e.NoEmpleado) WHERE (d.Nombre_Depto LIKE “Informatica”) AND r.Numero_proy is NULL;


20)De las tablas empleados y cargas_familiares, muestre una lista de las personas que nacieron en el mes de febrero.


select Nombre, FechaNacimiento from empleados WHERE month(FechaNacimiento)=“02”
union
select nombre_carga, FechaNacimiento from carga_familiar WHERE month(FechaNacimiento)=“02”;


21)De las tablas empleados y cargas_familiares, muestre una lista de las personas que nacieron en el mes de febrero, cuyo nombre comience con “F”.


select Nombre, FechaNacimiento from empleados WHERE month(FechaNacimiento)=“02” AND Nombre LIKE “F%”
union
select nombre_carga, FechaNacimiento from carga_familiar WHERE month(FechaNacimiento)=“02” AND Nombre LIKE “F%”;


22)¿Qué empleados no están asignados a ningún proyecto, y que trabajen en el departamento de Finanzas o Producción o Informática?


SELECT e.Nombre FROM empleados as e LEFT JOIN rel_empleado_py as r ON(e.NoEmpleado = r.NoEmpleado) LEFT JOIN departamento as d ON (e.IdDepto = d.IdDepto) WHERE (r.NoEmpleado IS NULL AND) d.Nombre_depto IN (“Finanzas” , “Produccion” , “Informatica”);


23)Muestre el o los departamentos que son controlados por un departamento, cuyo nombre comienza con “C”.


select * from departamento as sumiso inner join departamento as controlador
on (sumiso.depto_control = controlador.iddepto) where controlador.nombre_depto like “C%”;


24)¿Qué empleados no están asignados a ningún proyecto, y trabajan en un departamento que está controlado por una unidad, cuyo nombre comienza con “C”?


SELECT e.Nombre FROM empleados as e LEFT JOIN rel_empleado_py as r ON(e.NoEmpleado = r.NoEmpleado) INNER JOIN departamento as s ON(d.IdDepto = e.IdDepto) INNER JOIN departamento as c ON(s.depto_control = c.iddepto) WHERE (r.Numero_proy IS NULL) and c.nombre_depto like “C%”;


25)Muestre los pasa tiempos (intereses) que no están relacionados con ningún empleado.


SELECT i.nombre_interes FROM intereses as i LEFT JOIN relación_empleado_interes as r USING(id_interes) WHERE r.id_interes IS NULL;


26)Muestre las personas que tienen entre sus pasatiempos (intereses) leer y bailar, pero que no tienen cargas familiares.


SELECT e.Nombre FROM relación_empleado_interes as r LEFT JOIN intereses as i ON(r.id_interes = i.id_interes) LEFT JOIN empleados as e ON(e.NoEmpleado = r.NoEmpleado) LEFT JOIN carga_familiar as cf ON(cf.NoEmpleado = r.NoEmpleado) WHERE ((i.nombre_interes LIKE “leer” OR i.nombre_interes LIKE “bailar”) AND cf.NoEmpleado IS NULL) GROUP BY e.Nombre HAVING count(e.Nombre)>1;


27)Muestre las personas que tienen entre sus pasatiempos (intereses) leer y bailar, y que ademas estén trabajando en un proyecto en Temuco.


SELECT e.Nombre FROM relación_empleado_interes as r LEFT JOIN intereses as i ON(r.id_interes = i.id_interes) LEFT JOIN empleados as e ON(e.NoEmpleado = r.NoEmpleado) LEFT JOIN rel_empleado_py as rep ON(re.NoEmpleado = r.NoEmpleado) LEFT JOIN proyectos as p ON(p.Numero_proy = rep.Numero_proy) WHERE ((i.nombre_interes LIKE “leer” OR i.nombre_interes LIKE “bailar”) AND p.Lugar LIKE “TEMUCO” ) GROUP BY e.Nombre HAVING 
count(e.Nombre)>1;


28)El FBI requiere una lista de los empleados que trabajan en los departamentos controlados por el departamento de Administración, y que no estén relacionados con ningún interés o pasatiempo.


SELECT e.Nombre FROM artamento as s INNER JOIN departamento as m
ON s.idDepto = m.depto_control
INNER JOIN empleados as e

ON m.idDepto = e.idDepto
LEFT JOIN relacion_empleado_interes as r
ON e.NoEmpleado = r.NoEmpleado
WHERE s.Nombre LIKE “Informatica” ADN r.NoEmpleado IS NULL;


29)Gerencia necesita, en una sola lista, el rut, nombre y apellido los empleados que trabajan en los departamentos controlados por el departamento de Administración, y los empleados que poseen como carga familiar solo hijos.


SELECT e.Rut, e.Nombre, e.Apellido FROM empleados as e LEFT JOIN departamento as s ON(c.IdDepto = e.IdDepto) INNER JOIN departamento as c ON(s.depto_control = c.iddepto) WHERE c.nombre_depto LIKE “Administracion”
Unión
SELECT e.Rut, e.Nombre, e.Apellido FROM empleados as e RIGHT JOIN carga_familiar as cf USING (NoEmpleado) WHERE cf.parentesco LIKE “hijo”;


30)Gerencia necesita, en una sola lista, el rut, nombre y apellido los empleados que
trabajan en los departamentos controlados por el departamento de Administración, y los empleados que actualmente no poseen cargas familiares.



SELECT e.Rut, e.Nombre, e.Apellido FROM empleados as e LEFT JOIN departamento as s ON(c.IdDepto = e.IdDepto) INNER JOIN departamento as c ON(s.depto_control = c.iddepto) WHERE c.nombre_depto LIKE “Administracion”
Unión
SELECT e.Rut, e.Nombre, e.Apellido FROM empleados as e LEFT JOIN carga_familiar as cf USING (NoEmpleado) WHERE cf.parentesco IS NULL;


31)Muestre una lista que debe contener los empleados que ganan mas que el sueldo promedio y los empleados que poseen como mínimo 3 intereses (los empleados que se repiten, se muestran las dos veces).


SELECT * FROM empleados HAVING sueldo > AVG(sueldo) UNION
SELECT * FROM empleados HAVING sueldo >AVG(Sueldo) UNION

SELECT * FROM empleados as e
INNER JOIN relacion_empleado_interes as r
ON e.NoEmpleado = r.NoEmpleado GROUP BY r.NoEmpleado HAVING COUNT(r.NoEmpleado)>3;






El siguiente listado de ejercicios está destinado, principalmente, a reforzar uso de Restricciones, Vistas y Transacciones según lo presentado en el capítulo 11.
Para ello se considerará el modelo presentado en la guía de ejercicios del capitulo 10, cuando sea necesario.
En caso contrario se hará las referencias que correspondan. Para cada uno de los ejercicios, usted debe proponer el comando o la solución correspondiente.





Antes de comenzar




a) Explique y ejemplifique el concepto de vista. 


¿Cuál es la ventaja que presentan las vistas?


Una vista es una tipo de tabla virtual, si bien, cada vez que realizamos una consulta, generamos una tabla virtual, que despues de usarse es borrada; al Crear una VISTA le asignamos un nombre a esta tabla virtual y queda almacenada en la misma base de datos, por lo que podemos acceder a ella en otro momento, si asi estimamos conveniente.

¿Con qué fin?

Para acceder fácilmente a las consultas ( a veces tediosas o complejas), y también para acotar la informacio a mostrar.


Por Ejemplo:
En la Base de Datos de una tienda de Retail, se puede crear vistas con datos de ventas SEGÚN la marca para así entregar estos datos para trabajar a los vendedores internos ESPECIFICOS de la marca correspondiente. Acotando asi la información y limitando el acceso a los datos que no le conciernen.



b) Explique y ejemplifique el concepto de transacción. 


¿Cuál es el problema que resuelven las transacciones?


Las Transacciones Nos Dan la posibilidad de realizar varias sentencias de una sola vez, sintetizándolas todas en un solo paso.

¿Como Funciona?

Se inicia la transacción con un encabezado llamado START TRANSACTION; Luego escribimos línea a línea las sentencias que queramos ejecutar, cuando llegamoso al Final Podemos elegir, si estamos Conformes con las sentencias que queremos ejecutar o quizás hemos cambiado de opinión y no queremos llevar a cabo tales sentencias, en el caso de que estemos seguros de la transacción, cerramos la transacción con COMMIT; , en el caso de habernos arrepentido la cerramos con ROLLBACK; y ninguna sentencia se ejecutará. Cabe Destacar que Si hay errores en alguna sentencia, NINGUNA se llevara a cabo, aunque hayamos cerrado con COMMIT;

1.- Problema No. 1, Empleados del Listado No. 2


1.1.- Haga una vista que permita conocer el promedio de sueldo que tienen cada departamento de la empresa. La idea es que esa vista sea como la tabla de departamento pero extendida con el atributo promedio_sueldo.


CREATE VIEW v_prom_sueldo AS
SELECT AVG(e.Sueldo) AS “promedio_sueldo”,d.Nombre_depto,d.NoJefe,d.depto_control
FROM Empleados as e
INNER JOIN departamento as d
ON e.idDepto = d.IdDepto
GROUP BY d.idDepto;



1.2.- Use la vista desarrollada en el punto 1.1.- para resolver: Mostrar todos los departamentos en que la diferencia de sueldos entre el jefe y el promedio de sus empleados es mayor al 40%.

SELECT v.Nombre_depto FROM v_prom_sueldo AS v
INNER JOIN empleados as e
ON v.NoJefe = e.NoEmpleado
WHERE (e.Sueldo - v.promedio_sueldo) > (0,4*v.promedio_sueldo);



1.3.- Resuelva el problema de generar una vista similar a la del punto 1.1.- pero que no considere el sueldo del jefe.


CREATE VIEW v_v2 AS
SELECT AVG(Sueldo) AS “promedio_sueldo”, idDepto, Nombre_depto, NoJefe, depto_control FROM departamento
GROUP BY idDepto;



1.4.- Describa una transacción que permita actualizar el sueldo de los empleados en base al reajuste que por ley deben hacer las empresas según el IPC del año anterior.


START TRANSACTION;
update empleados set sueldo = sueldo*IPC; COMMIT;
Esta transacción será realizada en las instancias que la ley lo determine.


1.5.- Los empleados tienen derecho a conocer su información de sueldos. Para ello se propone definir un usuario para cada empleado cuyo user_name será la unión de su nombre y su apellido mediante un guión y que su password estará compuesta por las últimas 2 letras de su nombre unidas al mes y día de su nacimiento y seguidas de las dos primeras letras de su apellido. Es decir, si el empleados se llama Juan Perez y su fecha de nacimiento es 1986-11-26 su username =“juan_perez” y password=“an1126pe”. Haga la vista que permite mantener estos valores asociados a cada empleado.


CREATE VIEW v_v3 AS
SELECT CONCAT(Nombre,”_”,Apellido) AS “username”, CONCAT(SUBSTRING(Nombre,LENGTH(Nombre)-1, LENGTH(Nombre)), MONTH(FechaNacimiento), DAY(FechaNacimiento), SUBSTRING(Nombre,1,2)) AS 
“password” FROM empleados;


1.7.- Se quiere una restricción que impida que exista empleados nuevos que sean menores de edad, es decir que tengan menos de 18 años.


ALTER TABLE empleados ADD CONSTRAINT CHECK ( YEAR(CURDATE()) - YEAR(FechaNacimiento) - (RIGHT(CURDATE(),5) < RIGHT(FechaNacimento,5)) > 18);


1.8.- Suponga que al Gerente de la empresa no le interesaría que cualquier empleado nuevo tenga un sueldo mayor a del jefe del departamento donde ese empleado trabajará. Explore si es factible crear una clausula Check que permita
hacer realidad la idea del gerente.


ALTER TABLE empleados ADD CONSTRAINT
CHECK idDepto IN (SELECT idDepto FROM departamento ) AND Sueldo < (SELECT e.Sueldo FROM departamento as d

INNER JOIN empleados as e ON d.NoJefe = e.NoEmpleado);


2.- Problema No. 3, Video Club, del Listado No. 2


Un video club, necesita implementar una base de datos que sea capaz de llevar un catalogo de sus películas a disposición, este catalogo debe permitir búsquedas por actor principal, país de origen de la película, censura (mayores de XX años), categoría (acción, romance, aventuras, etc.), para ello tiene el siguiente modelo relacional:




VIDEO ( id_video, titulo, id_idioma, id_actor, id_categoria, id_censura, id_pais, duración,año_estreno, subtitulo)
ACTOR ( id_actor, id_pais, id_categoria, nombre, apellido )
PAIS ( id_pais, id_ idioma, nombre ), IDIOMA(id_idioma, descripción ) 
CATEGORIA ( id_categoria, descripción )
CENSURA ( id_censura, descripción )




A partir de este modelo, complemente la base de datos actual de manera tal,
que se puedan hacer efectivos préstamos y devoluciones de videos a clientes.


Haga las sentencias SQL necesarias para permitir aquella incorporación.


Por otra parte las consultas a realizar son las siguientes:


2.1.- Comercialmente las películas que duran menos de 30 minutos no son un buen negocio para el video club, por lo cual el gerente ha ordenado que no se ingresen a la base de datos películas que duren menos de 30 minutos. Proponga una solución a ese problema.


ALTER TABLE video
ADD CONSTRAINT CHECK (duracion > 30);



2.2.- Asegúrese que las películas sean de una sola de las tres categorías: “Todo Exp.”, “14 y +” y “18 y +”.


ALTER TABLE video
ADD CONTRAINT CHECK censura IN(‘Todo Exp.’ , ‘14 y +’ , ‘18 y +’);



2.3.- En el problema se solicita que usted defina las tablas que permitirían que un cliente pueda arrendar y devolver películas. Usualmente eso se logra con una tabla CLIENTE(id_cliente, nombre, ...), una tabla de ejemplares en arriendo
EJEMPLARES(id_ejemplar, id_video,...) y una tabla PRESTAMOS que debe relacionar al cliente con los ejemplares, considerando el id_cliente y el id_ejemplar junto con datos como la fecha de arriendo y la fecha estimada de devolución . Haga las sentencias que permiten crear la tabla de PRESTAMOS considerando una clausula que impida que los empleados ingresen una fecha de devolución que sea menor a la fecha de préstamo.


CREATE TABLE Cliente( id_cliente INT PRIMARY KEY, Nombre VARCHAR(16),
Fono INT);

CREATE TABLE Ejemplares( id_ejemplar INT,
id_video INT);

ALTER TABLE Ejemplares ADD FOREING KEY (id_video) REFERENCES VIDEO(id_video);
CREATE TABLE Prestamos (
id_cliente INT,

id_ejemplar INT, fecha_arriendo DATE, fecha_devolucion DATE);
ALTER TABLE Prestamos ADD FOREING KEY (id_cliente) REFERENCES Cliente(id_cliente);
ALTER TABLE Prestamos ADD FOREING KEY (id_ejemplar) REFERENCES Ejemplares(id_ejemplares);
ALTER TABLE Prestamos ADD CONSTRAINT CHECK (fecha_devolucion > fecha_arriendo);


2.4.- Al devolver una película se debe registrar la fecha de devolución real y si hay morosidad esto debe ser registrado en alguna parte de modo que al cliente se le cobre una multa. Donde la registraría los datos que permiten chequear si el cliente tiene multa pendiente?


R: En la tabla Prestamos, pues es aquí donde se mantendrá información referente a la fecha de devolución y en base a esta es posible generar una mora. Para esto se tendría que agregar una columna que guarde un tag de multa, de este modo es posible evaluar que clientes poseen muchos retrasos respecto a la cantidad de arriendos.
ALTER TABLE Prestamos ADD COLUMN Atraso BOOL DEFAULT FALSE;


2.5.- Genere la vista de los morosos recalcitrantes para que los empleados que arriendan tengan una advertencia de número de películas máximas en arriendo. La idea es que esta vista contenga el todos los datos de los clientes pero con una columna adicional que diga recalcitrante si es que ese cliente tiene un porcentaje de morosidad mayor al 40%; es decir que si han arrendado 100 películas han devuelto con atraso más de 40.


CREATE VIEW arrdos_por_cliente AS
SELECT id_cliente, count(id_cliente) AS "total_arrdos" FROM prestamos GROUP BY id_cliente;

CREATE VIEW atrasos_por_cliente AS
SELECT id_cliente, count(id_cliente) AS "total_atrasos" FROM prestamos where at = 's' GROUP BY id_cliente;

CREATE VIEW dicom_video AS
SELECT * FROM arrdos_por_cliente as c INNER JOIN v2 AS v
ON c.id_cliente = v.id_cliente
WHERE c.total_arrdos*0.4 < v.total_atrasos;