jueves, 25 de octubre de 2012

domingo, 21 de octubre de 2012

Material - Seminario Bases de Datos

Diapositivas - Primera parte
Diapositivas - Segunda parte
Diapositivas - Tercera parte
Diapositivas - Cuarta parte
Libro Bases de Datos MySQL
Fortamto IEEE para Artículos 

Caso de Estudio
Durante el seminario trabajamos en un caso de estudio, donde dados unos requerimientos iniciales se realizó el diagrama entidad - relación, luego elaboramos el modelo relacional, posteriormente implementamos la base de datos mediante el lenguaje de definición de datos (LDD) de SQL y finalmente realizamos un conjunto de consultas (lenguaje de manipulación de datos LMD).
Base de datos
Diagrama Entidad - Relación
Modelo Relacional
Consultas

Plazo de Entrega
Noviembre 6 (Martes) a las 4:00 PM 

Triggers y Procedimientos Almacenados (Store Procedures)

--PROCEDIMIENTO ALMACENADO--

DELIMITER $$
CREATE PROCEDURE sp_registrodoctor()
begin
UPDATE doctor
SET ums_doc_registro='no'
WHERE ums_doc_registro='';
end $$
delimiter ;

--TRIGGER--

DELIMITER $$
CREATE TRIGGER T_doctorRegistro
AFTER INSERT ON doctor
FOR EACH ROW
BEGIN
CALL sp_registrodoctor();
END$$
DELIMITER ;

UPDATE doctor
SET ums_doc_registro='no'
WHERE ums_doc_registro='';

jueves, 11 de octubre de 2012

Tareas Programadas - Cron Job

Hola Todos,

Para quienes están trabajando en Ubuntu, deben revisar dos aspectos que no tuvimos en cuenta en la sesión anterior:
a) Que el archivo que se está llamando para realizar la acción (agregar_medicos.php) tenga en general todos los permisos (777) para esto pueden usar el comando chmod.

b) En la línea de ejecución del cron job, deben tener en cuenta la ruta donde tienen instalado el php, por ejemplo:

00 10 11 * * user/bin/php(ruta del php) -f
/<<...colocar toda la ruta del proyecto...>>/agregar_medicos.php /<<...colocar toda la ruta del proyecto...>>/cj.txt

miércoles, 10 de octubre de 2012

SQL Injection

En la jornada pasada revisamos una técnica para evitar que usuarios no autorizados ingresen al sistema de información mediante la aplicación técnicas de SQL Injection.
Lectura 01
Lectura 02

Delitos informáticos en Colombia

En este enlace les comparto el documento correspondiente a la Ley 1273 de 2009, “Por medio de la cual se modifica el Código Penal, se crea un nuevo bien jurídico tutelado - denominado “de la protección de la información y de los datos”- y se preservan integralmente los sistemas que utilicen las tecnologías de la información y las comunicaciones, entre otras disposiciones”.

lunes, 1 de octubre de 2012

Sesión 18

Durante esta jornada se realizaron avances en el desarrollo del proyecto, construyendo la estructura de bases de datos requerida para almacenar la información, según los requerimientos presentados.

Aporte de Alejandra: En este documento encontrarán la descripción de las actividades realizadas durante la sesión.
----------------------------------------------------------------------------------------------------------
Aporte de Carlos Torres: En el archivo comprimido se encuentra el script para exportar la base de datos terminada, también el modelo entidad relación de la base datos y una carpeta con las clases php que habíamos utilizado.

1 ) La clase bdatos.php contiene todos los métodos para trabajar con la base de datos.

2 ) La clase operaciones es una implementacion de la clase bdatos.php

3 ) Desde un formulario deben enviarse los datos por medio de POST a la clase operaciones.php, una vez lleguen los datos, se reciben por medio de la función REQUEST, luego se concatenan dentro de una variabla que contendrá todos los datos concatenados y otra variable que contendrá todos los nombres de los campos concatenados.

4 ) Luego se crea un objeto de la clase bdatos.php para hacer un llamado de los métodos: insertar, modificar, eliminar o consultar.

5 ) Los parámetros que reciben estos métodos son: el nombre de la tabla y las variables que concatenamos anteriormente

Los métodos de consultar deben ser modificados dependiendo de la tabla que se usa.
----------------------------------------------------------------------------------------------------------

Compromisos Académicos:
Estos compromisos son para Oct 1/2012:
Carlos y Oscar: Terminan la base de datos del proyecto.
Alejandra: Envía la documentación de la jornada.

Estos compromisos son para Oct 3/2012, con base en los anteriores:
Valeria y Daniel: Ingresa los 8.000 datos en la tabla paciente.
Laura y Alejandra: Ingresan los datos correspondientes a los medicamentos (de acuerdo a la página referida en el proyecto).
Alejandro y Valeria: Ingresan los datos de las enfermedades.
Yeison y Andres: Elaboran el formulario para realizar el CRUD de Paciente.
Johan: Elabora los formularios para realizar el CRUD de: sangre tipo, doctor, iden. tipo
Mario, Camilo y Cristian: Elaboran los formularios para realizar el CRUD de: alergias, antecedentes, pacientes.
Alejandra, Luisa, Darlleny: Elaboran el formulario para realizar el CRUD de: historias clínicas

miércoles, 26 de septiembre de 2012

Sesión 17

Durante esta sesión se realizó una presentación detallada del  Proyecto Final.  del curso, así como sus respectivas fechas de entrega. También se presento el concepto de Bases de Datos Centralizadas y Bases de Datos Distribuidas y se explicó en qué casos debe implementarse un modelo de Bases de Datos Distribuidas.


Iniciamos con la construcción del proyecto, como primera medida se inició con el diseño e implementación de la estructura de la base de datos, la cual denominamos UMSalud, a continuación les dejo dos enlaces:
Base de Datos elaborada. Aportes de Christian
Documentación de la clase. Aportes de Alejandro.

Para la próxima clase, cada grupo debe garantizar que la fila de computadores que le corresponde tenga instaladas las herramientas, en este caso: XAMPP, MySQL WB.

lunes, 17 de septiembre de 2012

Aviso

El próximo miércoles no tendremos la jornada de clase habitual, dado que fui seleccionado por Colciencias como par para evaluación de proyectos. Continuamos con las sustentaciones el próximo viernes.

Por favor estar atentos al blog, dado que proximamente estaré publicando el proyecto.

miércoles, 5 de septiembre de 2012

Ayuda [Programación y BD]

Buenos días,

Este archivo contiene una clase para el manejo de las operaciones básicas de bases de datos entre php y mysql. En clase veremos su funcionamiento y concepción.

Nombre del archivo: bdatos.php / Contenido:
    class bdatos
    {
        //Definicion de atributos de la clase
        var $bd_nombre;
        var $bd_clave;
        var $bd_ip_host;
        var $bd_usuario;
        var $bd_conexion;
        var $bd_resultado;
        var $bd_nregistros;
       
        //Definicion de metodos de la clase
        //Metodo constructor
        function bdatos()
        {
            $this->bd_nombre="programacioniv";
            $this->bd_clave="";
            $this->bd_ip_host="127.0.0.1";
            $this->bd_usuario="root";
        }
        //Metodo conectar a base de datos
        function bd_conectar($servidor,$usuario,$clave,$nombre)
        {
            $conectado=true;
            $this->bd_conexion=mysql_connect($servidor,$usuario,$clave);
            if(!$this->bd_conexion)
            {
                $conectado=false;
                die("Error de conexion a la base de datos: ".mysql_error());
               
            }
            mysql_select_db($nombre,$this->bd_conexion);
            return($conectado);
        }
       
        //Metodo desconectar base de datos
        function bd_desconectar()
        {
            mysql_close($this->bd_conexion);
        }
       
        //Metodo consultar
        function bd_consultar($sql)
        {
            $this->bd_conectar($this->bd_ip_host, $this->bd_usuario, $this->bd_clave,$this->bd_nombre);
            $this->bd_resultado=mysql_query($sql,$this->bd_conexion);
            $this->bd_desconectar();
            $this->bd_nregistros=@mysql_num_rows($this->bd_resultado);
        }
       
        //Metodo Insertar
        function bd_insertar($tabla, $campo, $valores)
        {
            $sql="INSERT INTO ".$tabla." (".$campo.") VALUES (".$valores." )";
            $this->bd_consultar($sql);
            return($sql);
        }
       
        //Metodo Eliminar
        function bd_eliminar($tabla, $campo, $codigo)
        {
            $sql="DELETE FROM".$tabla." WHERE ".$campo. " = ".$codigo;
            $this->bd_consultar($sql);
            return($sql);
        }
       
        //Metodo Modificar
        function bd_modificar($tabla, $campoyvalores, $condicion)
        {
            $sql="UPDATE ".$tabla." SET ".$campoyvalores. " WHERE ".$condicion;
            $this->bd_consultar($sql);
            return($sql);
        }
    }
   
?>

lunes, 3 de septiembre de 2012

Sesión 11

Se realizó un taller para mejorar las habilidades en el diseño de la estructura de almacenamiento de un base de datos (diagrama entidad - relación), realizando como caso de estudio la implementación del formulario para la declaración de IVA que expone la DIAN en su sitio web.

Como compromiso académico queda para el miércoles 05-SEP-2012, sustentar los siguientes puntos:
1. Diagrama entidad - relación
2. Implementación de la clase bdatos.php que contenga como mínimo los siguientes métodos: conectar, desconectar, insertar, modificar, eliminar y consultar.
3. Implementar un formulario web que registre por lo menos las tres primeras secciones del formulario de declaración de IVA.

viernes, 24 de agosto de 2012

miércoles, 22 de agosto de 2012

viernes, 17 de agosto de 2012

Sesión 08

Durante esta jornada se trabajó en lenguaje SQL usando DML (Lenguaje de Manipulación de Datos), estudiando las siguientes instrucciones:

1. Instrucción INSERT INTO 
Uso: Agregar registros en una tabla.
Ejemplo:
INSERT INTO age_instituciones 

   age_ins_nombre, age_ins_nit, age_ins_replegalnombre,  age_ins_replegalid, 
   age_ins_direccion,age_ins_email
)
VALUES
(  'Cuerpo de Bomberos de Manizales', 'Juan Perez', '30123123',
   'Calle 12 No 22 22', 'jperez@cbm.gov.co'
);

Nota:
a) Se realizaron insersiones múltiples usando "," como separador de registros.

2. Instrucción UPDATE
Uso: Modificar los datos de un registro previamente agregado.
Ejemplo:
UPDATE age_instituciones 
SET age_ins_nombre = 'CAMBIO'
WHERE age_ins_uid=83;

3. Instrucción DELETE
Uso: Eliminar registros de una tabla
DELETE FROM age_instituciones 
WHERE age_ins_uid=84;

4. Instrucción DROP TABLE
Uso: Elimina la tabla (Estructura y datos)
DROP TABLE age_instituciones;

5. Instrucción SELECT
Uso: Recupera datos almacenados en una o varias tablas.
Ejmplos:

SELECT age_ins_nombre, age_ins_nit,
       age_ins_replegalnombre,  age_ins_replegalid, 
       age_ins_direccion,age_ins_email
FROM age_instituciones
WHERE age_ins_uid BETWEEN 20 AND 30;

SELECT age.age_age_nombre AS 'EVENTO',
       apr.age_apr_fecha AS 'FECHA', 
       mun.age_mun_nombre As 'MUNICIPIO' 
FROM age_agenda AS age,
     age_municipiosagendas AS mag,
     age_agendaprogramaciones AS apr,
     age_municpios AS mun
WHERE mag.age_munagenda_uid=1 AND 
      apr.age_apr_fecha BETWEEN '2013-01-01' AND
      '2013-01-15'AND
      apr.age_age_uid=age.age_age_uid AND 
      mag.age_munagenda_uid=mun.age_mun_id
ORDER BY FECHA DESC;

Compromisos Académicos:
1. Resolver las siguientes preguntas implementado consultas SQL SELECT:
a. ¿Cuántos eventos hay programados entre el 01-Ene-2012 y el 31-Ene-2012?
b. ¿Cuántos eventos deportivos hay programados para el 15-Ene-2012?
c. ¿Cuáles son los eventos culturales que hay en Manizales la próxima semana?
d. ¿Cuál es la institución que realiza más eventos en Manizales?
e. ¿Cuáles son los 5 tipo de eventos que más se realizaron en Manizales el mes pasado?
f. ¿Cuál es el sitio donde más se realizan eventos en Manizales?
g. ¿Qué eventos, de qué tipo, quién organiza y dónde se realizaran, el próximo 25 de agosto?
2. El primer examen parcial queda programado para el próximo viernes Ago-24-2012

miércoles, 15 de agosto de 2012

Sesión 07

Sustentación de compromisos académicos.
Se establece plazo hasta el miércoles 22-Ago-2012 para volverlos a presentar.
Grupos máximo de 3 personas.

viernes, 10 de agosto de 2012

Sesión 06

Se realizaron diversos ejercicios usando las instrucciones vistas en la sesión anterior, profundizando en la creación de todas las tablas requeridas para crear la solución al problema propuesto.

Compromisos académicos:
1. Mediante la instrucción LOAD DATA IN FILE, cargar la información de cada una de las tablas creadas en el sistema.
2. Verificar por qué varía el tamaño teórico del tamaño en práctica de un registro en cada tabla.

miércoles, 8 de agosto de 2012

Sesion 05


Durante esta sesión iniciamos el trabajo usando SQL (Lenguaje Estructurado de Consulta - Structured Query Language), teniendo en cuenta el concepto DDL (Lenguaje de Definición de Datos)

1. Instrucción CREATE DATABASE 
Uso: Esta instrucción nos permite crear nuevas bases de datos, en caso de ejecutarla y que el nombre de bases de datos ya exista, el sistema generará un error no permitiendo crear la nueva.
Formato SQL: CREATE DATABASE ;
Ejemplo: CREATE DATABASE db2_t01_agenda;
Todas las bases de datos que creemos en el curso tendrán el prefijo db2_, posteriormente el número del taller (en este caso t01_, nos indica taller 01) y finalmente un nombre representativo.

2. Instrucción DROP DATABASE
Uso: Esta instrucción borra una base de datos completa (estructura y datos), se aconseja tener una copia de seguridad antes de ejecutar este comando, se aclara que una vez ejecutado no se podrá recuperar la base de datos.
Formato SQL: DROP DATABASE ;
Ejemplo: DROP DATABASE db2_t01_agenda;

3. Instrucción CREATE TABLE
Uso: Esta instrucción permite crear una nueva tabla en la base de datos, si existe una tabla con el mismo nombre generará un error no permitiendo crear la nueva. Como estándar para la creación de tablas se estableció que llevarían la abreviatura (3 primeras letras) del nombre de la base de datos (age_), posteriormente el nombre de la tabla en plural, en minúsculas y sin caracteres especiales como tildes, eñes, y demás (lugares): age_lugares.
Formato SQL: CREATE TABLE  
(Campo1 (tamaño) tipodedato restricciones, 
 Campo2 (tamaño) tipodedato restricciones,
 ...
 Campon (tamaño) tipodedato restricciones;
Ejemplo:
USE db2_t01_agenda;
CREATE TABLE age_lugares
(age_lug_uid INT (10) NOT NULL AUTO_INCREMENT PRIMARY KEY
              COMMENT 'Codigo de lugar',
 age_lug_nombre VARCHAR (250) CHARACTER SET utf8 
              COLLATE utf8_spanish_ci
              NOT NULL COMMENT 'Nombre del lugar',
 age_lug_capacidad INT (10) NOT NULL
              COMMENT 'Numero de personas permitidas para el lugar',
age_lug_direccion VARCHAR (250) CHARACTER SET utf8 
              COLLATE utf8_spanish_ci NOT NULL
              COMMENT 'Localizacion del sitio dentro del municipio',
age_lug_telefono VARCHAR (20)
              COMMENT 'Numero de Telefono',
age_lug_celular VARCHAR (20) COMMENT 'Numero de celular'
)
ENGINE = InnoDB;

4. Instrucción ALTER TABLE

Uso: Esta instrucción permite modificar la estructura de una tabla previamente creada. Se recomienda tener una copia antes de ejecutarla dado que su acción podría eliminar datos registrados.
Formato SQL: ALTER TABLE

4.1 AGREGAR UN CAMPO AL FINAL DE LA TABLA

USE db2_t01_agenda;
ALTER TABLE age_lugares
ADD age_lug_email VARCHAR (250) CHARACTER SET utf8 
         COLLATE utf8_spanish_ci NOT NULL COMMENT 'Correo electronico del lugar';

4.2 MODIFICAR LA ESTRUCTURA DE UN CAMPO
USE db2_t01_agenda;
ALTER TABLE age_lugares
MODIFY age_lug_celular VARCHAR (25) CHARACTER SET utf8 
           COLLATE utf8_spanish_ci NOT NULL 
           COMMENT 'Celular de contacto del lugar';

4.3 AGREGAR UN CAMPO DESPUÉS DE OTRO
USE db2_t01_agenda;
ALTER TABLE age_lugares 
ADD age_lug_paginaweb VARCHAR( 250 ) CHARACTER SET utf8 
         COLLATE utf8_spanish_ci NOT NULL 
         COMMENT 'Sitio web del lugar' AFTER age_lug_celular;

DBMS: phpmyadmin
Mediante el uso de phpmyadmin vimos cómo realizar un proceso de ingeniería en reversa para autogenerar el diagrama entidad - relación. También vimos cómo generar el diccionario de datos de forma automática.

viernes, 3 de agosto de 2012

Sesion 04

Durante esta jornada se expuso un problema para solucionarlo mediante la implementación de una base de datos: centralización de eventos de un municipio, mediante el ejercicio realizado se comprendió el problema, se identificaron las entidades de almacenamiento requeridas por el problema (tablas), sus principales campos y las relaciones entre ellas.

miércoles, 1 de agosto de 2012

Sesión 03

Revisión del Taller 01:
En esta sesión se realizó una revisión personalizada por cada grupo donde se verificó cada punto solicitado en el taller, se aclararon dudas principalmente sobre los contenidos de los manuales solicitados, profundizando en la construcción de un diagrama de despliegue sobre la arquitectura requerida para los programas a instalar. También se hicieron aclaraciones sobre la elaboración del Benchmarking de Motores de Bases de Datos.

Compromisos académicos:
1. Cada grupo de trabajo enviará antes del 4 de Agosto al monitor del curso, los ítems a corregir requeridos por el profesor en la revisión.
2. Enviar al monitor los archivos entregables del taller antes del próximo miércoles 8 de Agosto, con las correcciones efectuadas.

viernes, 27 de julio de 2012

Sesión 02 - SQL Básico

Durante esta jornada se trataron los temas 1.1 y 1.2 definidos en el acta de compromiso. Anexo encontrarán un enlace a las diapositivas usadas en clase.

lunes, 23 de julio de 2012

Jornadas Universitarias UM 40 Años

Esta semana se realizan en las Jornadas Universitarias con ocasión de los 40 años de la Universidad de Manizales, en este enlace podrán encontrar la programación.
Por tanto, el día miércoles no tendremos la clase habitual, la cual estaremos reanudando el viernes 27.

miércoles, 18 de julio de 2012

Sesión 01

Datos de Contacto
Docente: Ing. Julián Carvajal Vargas
E-Mail: jucarva@umanizales.edu.co
Blog de apoyo al curso Bases de Datos II

Objetivo General
Este curso será orientado por talleres que permitan llevar a la praxis los conceptos teóricos que se presentan en cada sesión de tipo magistral. Todos los talleres estarán orientados a que los participantes en el curso adquieran dos habilidades principales: a) dominio en la concepción y construcción de estructuras de almacenamiento del tipo relacional (DER Diagrama Entidad Relación). Y b) Dominio del lenguaje SQL (Structured Query Language – Lenguaje Estructurado de Consulta).

Temática General
Unidad 1. SQL básico
Unidad 2. Sistemas de información (plataforma web)
Unidad 3. SQL avanzado
Unidad 4. Bases de datos distribuidas

Evaluación
En el curso contará semanalmente con un taller que será sustentado por cada grupo (los grupos de trabajo serán de dos estudiantes). En cada corte se tomará el promedio de las notas de los talleres y tendrán un valor del 60%, el 40% se evaluará de forma individual mediante una prueba escrita.

Enlaces
Acta de compromiso
Taller 01

Notas Generales
1. Se recomienda a los miembros del grupo abrir cuenta en la plataforma de Gmail.
2. Los grupos de trabajo se conformarán desde el inicio del semestre y hay plazo para definirlos antes del 25 de julio a las 13:00:00, la información deben enviarla a la monitora del curso.