Sei sulla pagina 1di 22

4.4 Prctica de Normalizacin y SQL.

Introduccin
Tomaremos el caso de los estudiantes, las carreras en las que se anota, las materias en las que se inscribe y sus exmenes. Estos temas conocidos por todos nos ayudarn a aplicar lo estudiado para lograr una primer experiencia que consolide lo aprendido. Es muy importante destacar que la tarea de construir un modelo de datos para que el sistema que lo use cumpla con todos los requerimientos del usuario, requiere un proceso de relevamiento, de raciocinio y comunicacin de parte del Analista, para lo cual ste debe usar una metodologa para recopilar datos y expresar con la mayor claridad posible al usuario final, para que este pueda entender lo que la aplicacin est previsto atender y poder tener una nocin de lo que no va a cubrir el sistema. Sobre este punto existen metodologas probadas como Rational Unified Process (RUP) que est orientada a aplicaciones de gran porte, que abarcan la totalidad de una empresa, con mltiples actores y otras mas acotadas, para proyectos de menor envergadura, llamadas metodologas giles, destacamos en stas a SCRUM y a Extreme Programming (XP). Cada una de stas necesitara para su tratamiento respectivas materias de una carrera relacionada. Este trabajo que presentamos en esta actividad es un proceso real que se cumple durante el Anlisis y del Diseo de Sistemas y solamente se dedica a las estructuras de datos no se ocupa de cmo son los procesos o funciones de negocios.

El caso de estudio o narrativa


A continuacin presentamos una breve narracin que describe las caractersticas del negocio, para el que se debe modelar lo que se necesita registrar en este futuro sistema. En una universidad se deben organizar las tablas para poder almacenar la informacin de estudiantes, inscripciones, exmenes, materias, profesores. Los estudiantes tienen apellido, nombre, tipo y numero de documento, es necesario conocer la edad, el sexo, en que colegio finaliz el secundario, su talla, peso, la fecha del ingreso, su telfono mvil, mas uno fijo y otros telfonos que puedan servir para comunicarse, su domicilio familiar y el que tiene en crdoba, el promedio obtenido en su colegio de origen. Debe conocerse si existe un vnculo familiar con otro estudiante, cnyuge, hijo, padre, madre y hermano, limitando esta relacin solamente a stos vnculos. Adems se debe registrar las carreras que se dictan en esta casa de estudios, debiendo registrar el nombre, los ttulos que otorga, (al menos dos, pero pueden ser mas), una carrera puede tener varios planes y estos planes se relacionan con diversas materias. Las carreras se dictan en las distintas sedes de la Universidad y se requiere saber cul carrera se dicta en cada sede. Actualmente la Universidad tiene sedes propias y de tercero como los centros CAU, centros CEO. Estas sedes se deben registrar con el nombre, su tipo, direccin, localidad y provincia. Por ahora se necesitar registrar qu estudiante est inscripto en cada carrera, en que fecha lo hizo, la fecha de baja y las razones de la misma.

Materia: Base de Datos I Profesor: Calixto Maldonado

-1-

Para iniciar buscaremos las entidades, los atributos y las relaciones. Para detectar las Entidades nos fijaremos en los sustantivos: En una universidad se deben organizar las tablas para poder almacenar la informacin de estudiantes, inscripciones, exmenes, materias, profesores. Los estudiantes tienen apellido, nombre, tipo y numero de documento, es necesario conocer la edad, el sexo, en que colegio finaliz el secundario y la localidad del mismo, que puede ser distinta del estudiante, su talla, peso, la fecha del ingreso, su telfono mvil, mas uno fijo y otros telfonos que puedan servir para comunicarse, su domicilio familiar y el que tiene en crdoba, el promedio obtenido en su colegio de origen. Debe conocerse si existe un vnculo familiar con otro estudiante, cnyuge, hijo, padre, madre y hermano, limitando esta relacin solamente a stos vnculos. Adems se debe registrar las carreras que se dictan en esta casa de estudios, debiendo registrar el nombre, los ttulos que otorga, (al menos dos, pero pueden ser mas), una carrera puede tener varios planes y estos planes se relacionan con diversas materias. Las carreras se dictan en las distintas sedes de la Universidad y se requiere saber cul carrera se dicta en cada sede. Actualmente la Universidad tiene sedes propias y de tercero como los centros CAU, centros CEO. De stas sedes se deben registrar con el nombre, su tipo, direccin, localidad y provincia. Por ahora se necesitar registrar qu estudiante est inscripto en cada carrera, en que fecha lo hizo, la fecha de baja y las razones de la misma. Luego hacemos una lista con los atributos que nos parece que describen a cada entidad y tratamos de definir las claves candidatas. En una universidad se deben organizar las tablas para poder almacenar la informacin de estudiantes, inscripciones, exmenes, materias, profesores. Los estudiantes tienen apellido, nombre, tipo y numero de documento, es necesario conocer la edad, el sexo, en que colegio finaliz el secundario y la localidad del colegio, que puede ser distinta del estudiante, su talla, peso, la fecha del ingreso, su telfono mvil, mas uno fijo y otros telfonos que puedan servir para comunicarse, su domicilio familiar y el que tiene en crdoba, el promedio obtenido en su colegio de origen. Debe conocerse si existe un vnculo familiar con otro estudiante, cnyuge, hijo, padre, madre y hermano, limitando esta relacin solamente a stos vnculos. Adems se debe registrar las carreras que se dictan en esta casa de estudios, debiendo registrar el nombre, los ttulos que otorga, (al menos dos, pero pueden ser mas), una carrera puede tener varios planes y estos planes se relacionan con diversas materias. Los planes tienen un nombre y fecha desde y hasta para indicar su vigencia Las carreras se dictan en las distintas sedes de la Universidad y se requiere saber cul carrera se dicta en cada sede. Actualmente la Universidad tiene sedes propias y de tercero como los centros CAU, centros CEO. De stas sedes se deben registrar con el nombre, su tipo, direccin, localidad y provincia.

Materia: Base de Datos I Profesor: Calixto Maldonado

-2-

Por ahora se necesitar registrar qu estudiante est inscripto en cada carrera, en que fecha lo hizo, la fecha de baja y las razones de la misma.

Universidad

Sede

Estudiante

Colegio

Vinculo

Carrera

Plan

Materia

Nombre

Nombre Tipo Direccin Localidad Provincia

Nombre Apellido Edad (*) Tipo doc Nro doc Colegio Promedio Sexo Tel. celu Tel. fijo Tel. otro Domicilio1 Domicilio2

Nombre Localidad

Tipo Vinculo

nombre Titulo 1 Titulo 2 Titulo?

Nombre nombre Fecha dde

Este cuadro resume las entidades que podemos incluir en un primer momento. Este proceso va a ir refinando y creando o eliminando entidades y atributos, a medida que se realice el anlisis adecuado. Sobre las relaciones al buscar los verbos, encontramos que: 1. Los estudiantes se relacionan con una carrera inscribindose a ella. 2. Los estudiantes se relacionan entre s por vnculos familiares. 3. Un estudiante egresa de un colegio con un promedio. 4. Las carreras se relacionan con las sedes por que all se dictan. 5. Las carreras tienen planes asociados. 6. Los planes ser relacionan con materias 7. Las carreras estn formadas de materias 8. Las carreras son de la universidad 9. Las sedes son de la universidad 10. Los estudiantes son de la universidad
Cuadro 1 Relaciones halladas en la narrativa

Para continuar debiramos revisar si estn todas las entidades y si todas las que tenemos, son las adecuadas. Observemos que la Universidad es una entidad que surge del mximo nivel de jerarqua, ya que carrera, estudiante, sede tienen relacin con ellas. Pero imaginando cuantas tuplas o filas en esta tabla puede tener para este pequeo modelos de datos, podramos asumir que an no se necesita una entidad por que estamos dentro de un contexto interno de la misma y esto puede definirse como obvio y no considerar an la entidad de Universidad, dejando para un futuro el desarrollo de una entidad o varias para que den paso a una o varias tablas que contenga los datos impositivos de la Universidad, como el cuit que nos ayudara a identificar las operaciones en otro sistema contable y ser usado por los sistemas para imprimir listados, formularios con la informacin

Materia: Base de Datos I Profesor: Calixto Maldonado

-3-

grabada en las tablas y no deban ser escritos dentro del cdigo de los programas listadotes. Por lo tanto descartaremos la entidad Universidad y no incluiremos en el estudio las relaciones 8, 9 y 10. En Estudiante, aunque el texto se refiere explcitamente a la edad, no es conveniente incluir un atributo con este dato, que es derivado de la fecha de nacimiento, es decir se puede calcular de esta fecha, por lo que debe definirse el atributo fecha de nacimiento en vez de Edad. Este caso es aplicable a una Antigedad laboral, en los estudios, etc. En el primer cuadro se lo incluy (ver (*)), para contener todos los requerimientos originales pero en los siguientes cuadro ser reemplazado por la fecha de nacimiento. Sobre la entidad Vnculo y Materia, tienen hasta ahora un solo atributo lo que nos hace sospechar si pueden mantenerse como entidades o se pueden transformar en atributos de las entidades ms importantes. Veremos en los prximos pasos que pasar con ellas. Una alternativa es dejarlas pendientes y en prximas entrevistas revisar si hay atributos no nombrados para aceptar su participacin o limitarla como atributo en las entidades conocidas o descartarlas completamente. Debiramos resolver como se van a identificar cada una de estas entidades, buscando entre los atributos descriptos a aquellos capaces de identificar a cada una de las instancias de las entidades. Volvemos al cuadro para marcar con rojo las Claves Candidatas y las claves primarias
Sede Estudiante Colegio Vinculo Carrera Plan Materia

Nombre Tipo Direccin Localidad Provincia

Nombre Apellido FechaNac Tipo doc Nro doc Promedio Sexo Tel. celu Tel. fijo Tel. otro Domicilio1 Domicilio2

Nombre Localidad

Tipo Vinculo

nombre Titulo1 Titulo2 Titulo?

nombre Fechadde

Nombre

Cuadro 2 Claves Candidatas del Modelo

Definidas cules son las claves candidatas, debemos analizar cuales pueden ser las claves primarias de cada entidad. Se debern elegir aquellas claves candidatas con menor cantidad de atributos y que no tengan nulos, por la Regla de Integridad de Entidades. Por ejemplo, en la entidad Estudiante, hay dos claves candidatas, TIPO DOC y NRO DOC en conjunto y TEL. CELULAR, pero como no es obligatorio, aunque muy difundido, tener un Telfono Celular, al encontrarnos que un estudiante puede no tener este nmero, se tendra que poner un NULO para el atributo TEL. CELU, y esto est prohibido por la Regla mencionada anteriormente, por lo tanto TEL. CELU debe ser descartada como Clave primaria. Con TIPO y NRO DOC, el caso es que al ser compuesta, es habitual que los Analistas definan una Clave Artificial como Clave Primaria, eligiendo un solo atributo, numrico y lo que permite simplificar la identificacin, este tipo de claves son compactos no son modificables con el tiempo, y en entidades que son muy importantes en un modelo y son

Materia: Base de Datos I Profesor: Calixto Maldonado

-4-

referenciadas por numerosas entidades, es un factor de peso que se elija una clave primaria simple, es decir que este resuelta en una sola columna. Este tema de diseo de agregar claves artificiales esta relacionado con el problema de diseo, Dispersin de Claves primarias complejas o compuestas. Este tema es tpico de mltiples discusiones que sern tratadas en un foro de la materia. A las claves candidatas no utilizadas como clave primaria, normalmente se usan como forma de acceder rpidamente a la informacin y en la etapa de diseo, cuando estamos definiendo ndices, se les asigna un constraint o restriccin del tipo Unique, que tiene asociado un ndice que acepta valores nulos. Esta clave artificial se llama legajo y es habitual esta decisin, en las situaciones en que no es directa la eleccin de clave primaria, basndose en las Claves candidatas. En la entidad sede, la clave candidata es alfanumrica, lo que hace que influyan las maysculas y minsculas, por lo tanto se recurre a otra clave artificial, en este caso la llamamos ID_SEDE. Lo mismo para el colegio, nombre es un atributo que puede repetir valores, (cuantos colegios hay llamados Sarmiento o similares) por lo tanto asignaremos una clave artificial. En Carrera y en Plan consideramos con el mismo criterio anterior que las maysculas y minsculas y hacer repetir carreras con el mismo nombre, diferenciados slo por esto, por lo que le asignaremos ID_CARRERA e ID_PLAN respectivamente En materias, para agregar atributos propios, podemos sumar el atributo Crditos que es la unidad de medida con que se define la duracin del cursado. Y como en los casos anteriores, se decide aplicarle una clave primaria artificial llamada ID_MATERIA. Veamos como queda en el Cuadro 3
Sede Estudiante Colegio Carrera Plan Materia

ID_SEDE Nombre Tipo Direccin Localidad Provincia

LEGAJO Nombre Apellido FechaNac Tipo doc Nro doc Colegio Promedio Tel. celu Sexo Tel. fijo Tel. otro Domicilio1 Domicilio2

ID_COLE Nombre Localidad

ID_CARRERA nombre Titulo1 Titulo2 Titulo?

ID_PLAN nombre Fechadde

ID_MATERI A Nombre Crditos

Cuadro 3 Claves Candidatas del Modelo

Una vez definidas las claves primarias, para iniciar el uso de la normalizacin sobre estas entidades tomaremos la de estudiante. La primera forma normal indica que debe existir la clave primaria y que no debe haber campos repetitivos.

Materia: Base de Datos I Profesor: Calixto Maldonado

-5-

En estudiantes tenemos la clave primaria, legajo y en primera instancia, dos grupo de campos repetitivos, los referidos a telfonos y los domicilios. Para los domicilios, se recomienda consultar al usuario final, para que en su experiencia nos diga si dos domicilios, caracterizados como local y familiar, alcanzan para las necesidades propias de la institucin o si hay ocasiones en que este modelo no servira por insuficiente, a las necesidades de notificaciones legales o de otro tipo. Si la respuesta fuera que no hay ms necesidades que estos dos domicilios. Al calificarlos como domicilio local y domicilio familiar, queda definido estos atributos, y que no son lo mismo y para el mismo uso. Si la respuesta es necesitamos conocer la mayor cantidad posible de domicilios permanentes o temporales de la persona, es posible que se los considere a todos ellos como repetitivos y que deben ser derivados a otra entidad. Justamente esto es lo que fijamos para los telfonos, veremos en el siguiente cuadro, como descomponemos para llegar a la primera forma normal a la entidad estudiante y como construimos la nueva entidad telefonoEstudiante

Estudiante LEGAJO CP Nombre Apellido FechaNac Tipo doc Nro doc Sexo Promedio Domicilioestudiante Domiciliofamiliar

telefonoEstudiante Legajo CP y CF Nmero CP Tipo

Cuadro 4. La entidad Estudiante y una entidad derivada para pasar a la 1FN

En la nueva entidad telefonoEstudiante tomamos al Legajo y al nmero propiamente dicho como la clave primaria compuesta y no se define una clave artificial por que telefonoEstudiante no ser referenciada por otra tabla por lo que el problema de diseo de Propagacin de Claves compuestas o complejas no se presentar. Esta forma de identificar a cada fila de telefonoEstudiante, permite que se puedan cargar distintos nmeros telefnicos asociados, si se dejara solo el legajo no podra repetirse otra fila por que la clave primaria legajo solo, no lo permitira, como se ve en el ejemplo, en el primer cuadro la entidad con solamente el legajo como CP: telefonoEstudiante Legajo Numero Tipo 2152 035188999900 Fijo 2152 XXX REPETIDO! 0351156667788 Celular Cuadro 5. La identificacin de la entidad con solamente el legajo telefonoEstudiante Nmero 035188999900 0351156667788 OK!

Legajo 2152 2152

Tipo Fijo Celular

Cuadro 5. La identificacin de la entidad con dos columnas permite ms de una fila por estudiante

Materia: Base de Datos I Profesor: Calixto Maldonado

-6-

Esta forma de identificacin debe ser decidida por el equipo de modeladores de datos, para lograr un criterio comn a seguir y que ste sea consistente a lo largo de las numerosas entidades de este tipo. En anteriores ejemplos mostramos otro diseo de la tabla telefonoEstudiante, esto muestra que no hay una solucin nica cuando modela datos y por esto se deben buscar criterios consistentes, para lograr soluciones eficaces sin enormes diferencias entre los equipos que producen modelos de datos. En la revisin de las siguientes entidades, encontramos tambin en la entidad Carrera la situacin de atributos repetidos, operamos en el mismo sentido y obtenemos as el cuadro con las entidades en primera forma normal.
Sede Estudiante Colegio Carrera Plan Materia

ID_SEDE Nombre Tipo Direccin Localidad Provincia

LEGAJO Nombre Apellido FechaNac Tipo doc Nro doc Sexo Promedio Domicilioestudiante Domiciliofamiliar

ID_COLE Nombre Localidad

ID_CARRERA Nombre

ID_PLAN nombre Fechadde

ID_MATERIA Nombre Crditos

telefonoEstudiante Legajo Nmero Tipo

ttuloCarrera Id_carrera Ttulo Tipo

Cuadro 6 Modelo en Primera Forma Normal 1FN en rojo las claves primarias

Con este panorama, avanzaremos en la definicin de las relaciones trabajando con la herramienta MySQL Workbench, introducidas en el mdulo de Modelado Relacional. Como vemos en la Figura 1, se est modelando la entidad Estudiantes, tomando definiciones sobre los tipos de datos e indicando si son obligatorios (un check en la columna NN de Not Null) con un rombo relleno con celeste o vaco si no es obligatorio a la izquierda de la columna y cual es la clave primaria, con una llavecita en el mismo costado.

Materia: Base de Datos I Profesor: Calixto Maldonado

-7-

Figura 1. Cargando la entidad Estudiante

Algunos detalles de la carga en Workbench de la informacin que tenemos hasta ahora, usamos para la informacin alfanumrica al tipo de dato VARCHAR y para nmeros enteros como Legajo al tipo INT, si es numrico pero llevar decimales optamos por DECIMAL(i, j) con i que indica la cantidad total de dgitos a registrar y j la cantidad de decimales participantes, un promedio tiene como valor mximo a 10 y entre medio, por ejemplo a 6,33, 9,50, etc. Para esta columna de promedios se usar DECIMAL(3,2) (Ver tipos de datos en esta documentacin, http://dev.mysql.com/doc/refman/5.0/es/numeric-types.html) Avanzando con la carga en la herramienta Workbench, tendremos las entidades cargadas, ver en la figura 2. Notar que no estn reflejadas las relaciones, por lo tanto cada entidad tiene slo sus atributos propios, las relaciones se vern en los prximos pasos.

Materia: Base de Datos I Profesor: Calixto Maldonado

-8-

Figura 2. El mapa de entidades en la herramienta

Resolucin de las Relaciones


Analizamos las relaciones y cmo se resuelven en el modelo relacional. La forma de determinar las caractersticas de las relaciones es tomar una de las entidades y realizar la pregunta, una instancia de la primera entidad, con cuantas instancias de la otra entidad se relaciona?, la respuesta pueden ser, con una o con mas de una (usualmente se usa el varias para decir mas de una) y luego tomar la segunda entidad y hacer la pregunta una instancia de esta entidad con cuantas instancias de la primera entidad se relaciona? . Para empezar, tomaremos la primera relacin Los estudiantes se relacionan con una carrera inscribindose a ella. Las preguntas sern: Un estudiante, con cuntas carreras puede relacionarse? La respuesta es para ser considerado estudiante debes estar inscripto en una carrera, al menos, y una vez inscripto puede hacerlo en otra carrera, sin lmites Es decir como mnimo a Una carrera y como mximo, es entonces mas de uno o como generalizacin, Muchos. Esto hace una relacin uno a muchos, simbolizada como 1:M en esta parte de la relacin.

Materia: Base de Datos I Profesor: Calixto Maldonado

-9-

La segunda pregunta es con cuantos estudiantes puede relacionarse una carrera? Y la generalizacin es con ninguno (una carrera recin implementada) o con mas de uno o muchos, entonces este extremo es simbolizada tambin con 1:M lo que resulta en una relacin M:M que debe ser resuelta con la creacin de una tercera entidad, llamada asociativa o de relacin que contendr las claves primarias de ambas entidades que, en conjunto, sern parte o la totalidad de la clave primaria de esta nueva entidad a la que llamaremos estudianteXcarrera, con atributos que caracterizan la entidad, como la fecha de inscripcin, fecha de baja y el motivo, previndose como valores de dominio, abandono, egreso, cambio de universidad En la herramienta bast con elegir la relacin N:M y elegir las entidades a relacionar para que cree automticamente la tercer entidad con las claves primarias. Como vemos en la figura 3, usando MySQL Workbench.

Figura 3 con la herramienta hemos elegido relacionar n:m o muchos a muchos dos entidades y se crea la entidad asociativa

Luego de la creacin, se crearon los atributos propios de la nueva entidad asociativa. En este caso un estudiante se inscribe una sola vez en una carrera por lo que las dos claves forneas alcanzan para identificar las distintas filas, pero si esta relacin puede repetirse, como por ejemplo un estudiante puede anotarse varias veces en una materia por haber quedado libre antes, deber incluirse otra columna como clave primaria, por ejemplo la fecha de inscripcin, lo que nos lleva a una clave primaria de tres columnas. En este punto debiramos revisar si no necesitamos una clave artificial, por si esta entidad ser referenciada por varias entidades para evitar lo visto como propagacin de claves complejas.

Materia: Base de Datos I Profesor: Calixto Maldonado

- 10 -

La relacin creada cuando pusimos en primera forma normal a los telfonos de un estudiante genera una relacin 1:M por que las respuestas a las correspondientes preguntas serian, Un estudiante puede tener varios telfonos y un telfono pertenece a un solo estudiante lo que produce la ubicacin de una clave fornea en el lado muchos de la relacin, es decir en telefonoEstudiante. Con la herramienta debe elegirse primero la entidad del lado del muchos (telefonoEstudiante) y luego de elegir la relacin que queremos graficar 1:n hacemos click sobre la clave primaria de la entidad del extremo uno, es decir Estudiante y se crea automticamente la flecha que los describe y una entrada en los datos de la entidad que recibe la clave fornea. Como se ve en la Figura 4.

Figura 4 Creacin de una relacin 1:n con la clave fornea del lado Muchos

Un detalle a destacar es que con el uso de la herramienta, se acotan pasos ya que esta le pone el nombre a la columna (anteponindole el nombre de la entidad y el nombre de la columna original) y el tipo de dato idntico al de la clave primaria y resuelve posteriormente la sintaxis en la sentencia SQL, reduciendo eventuales errores y olvidos. Para completar el trabajo deber elegirse ambas columnas como claves primarias. Con estas tareas, hemos iniciado la construccin de un modelo de datos relacional luego de aplicarles las restantes Formas Normales, llegaremos a un modelo que rene las caractersticas

Materia: Base de Datos I Profesor: Calixto Maldonado

- 11 -

deseadas, con redundancia mnima y flexibilidad ante los cambios, es decir un modelo mejor de lo que inicialmente se puede prever. Esta lectura pretende revisar la modelizacin, ya vista, la creacin de las tablas, la carga de las filas y las consultas que podran realizarse sobre estas tablas. Luego de repetir las preguntas en todas la relaciones llegamos a un modelo de tablas que se muestra en la figura 5, se ha creado una nueva tabla para reflejar la relacin n:m que hay entre plan y materias, y se han creado todas las relaciones posibles, aplicando las tres formas normales ya que todos los atributos no clave dependen de toda la clave y de nada mas que de la clave primaria.

Figura 5 Modelo normalizado

Se habr notado que no hemos modelado la relacin asociada al requerimiento especfico que dice: Debe conocerse si existe un vnculo familiar con otro estudiante, cnyuge, hijo, padre, madre y hermano, limitando esta relacin solamente a stos vnculos. Al ser una relacin de estudiante con estudiante y muchos a muchos, por que un estudiante puede tener varios parientes y un pariente puede ser de varios estudiantes, esto crea una nueva tabla llamada parentezcoXestudiante que no mostramos por cuestiones de espacio. Pero lo animamos a resolverla y consultar con su tutor.

Creacin de las tablas con SQL


Con la ayuda de Workbench generaremos las sentencias SQL capaces de crear las tablas:

Materia: Base de Datos I Profesor: Calixto Maldonado

- 12 -

Aadimos las sentencias creadas para las 11 tablas resultantes. Inicia con unos seteos para MySQL, que han sido generados automticamente: SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL'; Si no existiera crea el esquema muestro_BD1. CREATE SCHEMA IF NOT EXISTS `muestro_BD1` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; Fija como esquema por defecto a muestro_BD1. USE `muestro_BD1`; Comienzan los create table que crean el modelo. -- ------------------------------------------------------ Table `muestro_BD1`.`colegio` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`colegio` ( `idcolegio` INT NOT NULL , `nombre` VARCHAR(45) NOT NULL , `localidad` VARCHAR(45) NOT NULL , PRIMARY KEY (`idcolegio`) ) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`estudiante` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`estudiante` ( `legajo` INT NULL , `Apellido` VARCHAR(45) NOT NULL , `Nombre` VARCHAR(45) NOT NULL , `fecha nacimiento` TIMESTAMP NOT NULL , `tipo documento` VARCHAR(3) NOT NULL , `nro documento` VARCHAR(12) NOT NULL , `sexo` VARCHAR(1) NOT NULL , `promedio` DECIMAL(3,2) NULL , `domicilioEstudiante` VARCHAR(45) NOT NULL , `domicilioFamiliar` VARCHAR(45) NULL , `colegio_idcolegio` INT NOT NULL , PRIMARY KEY (`legajo`) , INDEX `fk_estudiante_colegio1` (`colegio_idcolegio` ASC) , CONSTRAINT `fk_estudiante_colegio1` FOREIGN KEY (`colegio_idcolegio` ) REFERENCES `muestro_BD1`.`colegio` (`idcolegio` ) ON DELETE NO ACTION ON UPDATE NO ACTION)

Materia: Base de Datos I Profesor: Calixto Maldonado

- 13 -

ENGINE = InnoDB COMMENT = 'Tabla para registrar los estudiantes de la Universidad XXI'; -- ------------------------------------------------------ Table `muestro_BD1`.`telefonoEstudiante` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`telefonoEstudiante` ( `estudiante_legajo` INT NOT NULL , `telefono` INT NOT NULL , `tipo` VARCHAR(10) NOT NULL , INDEX `fk_telefonoEstudiante_estudiante1` (`estudiante_legajo` ASC) , PRIMARY KEY (`telefono`, `estudiante_legajo`) , CONSTRAINT `fk_telefonoEstudiante_estudiante1` FOREIGN KEY (`estudiante_legajo` ) REFERENCES `muestro_BD1`.`estudiante` (`legajo` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`sede` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`sede` ( `idsede` INT NULL , `Nombre` VARCHAR(45) NOT NULL , `domicilio` VARCHAR(45) NOT NULL , `localidad` VARCHAR(45) NOT NULL , `propio` VARCHAR(45) NOT NULL , `fecha de inicio` VARCHAR(45) NOT NULL , `nombre responsable` VARCHAR(45) NULL , PRIMARY KEY (`idsede`) ) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`carrera` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`carrera` ( `idcarrera` INT NOT NULL , `nombre` VARCHAR(45) NOT NULL , PRIMARY KEY (`idcarrera`) ) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`plan` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`plan` ( `idplan` INT NULL , `nombre` VARCHAR(45) NOT NULL , `fecha desde` TIMESTAMP NOT NULL , `fecha hasta` TIMESTAMP NULL , `carrera_idcarrera` INT NOT NULL ,

Materia: Base de Datos I Profesor: Calixto Maldonado

- 14 -

PRIMARY KEY (`idplan`) , INDEX `fk_plan_carrera1` (`carrera_idcarrera` ASC) , CONSTRAINT `fk_plan_carrera1` FOREIGN KEY (`carrera_idcarrera` ) REFERENCES `muestro_BD1`.`carrera` (`idcarrera` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`tituloCarrera` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`tituloCarrera` ( `nombre` VARCHAR(30) NOT NULL , `tipo de ttulo` VARCHAR(10) NOT NULL , `carrera_idcarrera` INT NOT NULL , INDEX `fk_tituloCarrera_carrera1` (`carrera_idcarrera` ASC) , CONSTRAINT `fk_tituloCarrera_carrera1` FOREIGN KEY (`carrera_idcarrera` ) REFERENCES `muestro_BD1`.`carrera` (`idcarrera` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`materia` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`materia` ( `idmateria` INT NOT NULL , `nombre` VARCHAR(45) NOT NULL , `Crditos` DECIMAL(3,1) NULL , PRIMARY KEY (`idmateria`) ) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`estudianteXcarrera` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`estudianteXcarrera` ( `estudiante_legajo` INT NOT NULL , `carrera_idcarrera` INT NOT NULL , `fecha ingreso` TIMESTAMP NOT NULL , `fecha baja` TIMESTAMP NULL , `motivo` VARCHAR(10) NULL , PRIMARY KEY (`estudiante_legajo`, `carrera_idcarrera`) , INDEX `fk_estudiante_has_carrera_estudiante` (`estudiante_legajo` ASC) , INDEX `fk_estudiante_has_carrera_carrera1` (`carrera_idcarrera` ASC) , CONSTRAINT `fk_estudiante_has_carrera_estudiante` FOREIGN KEY (`estudiante_legajo` ) REFERENCES `muestro_BD1`.`estudiante` (`legajo` ) ON DELETE NO ACTION ON UPDATE NO ACTION,

Materia: Base de Datos I Profesor: Calixto Maldonado

- 15 -

CONSTRAINT `fk_estudiante_has_carrera_carrera1` FOREIGN KEY (`carrera_idcarrera` ) REFERENCES `muestro_BD1`.`carrera` (`idcarrera` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`carreraXsede` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`carreraXsede` ( `carrera_idcarrera` INT NOT NULL , `sede_idsede` INT NOT NULL , `fecha_inicio` TIMESTAMP NOT NULL , PRIMARY KEY (`carrera_idcarrera`, `sede_idsede`) , INDEX `fk_carrera_has_sede_carrera1` (`carrera_idcarrera` ASC) , INDEX `fk_carrera_has_sede_sede1` (`sede_idsede` ASC) , CONSTRAINT `fk_carrera_has_sede_carrera1` FOREIGN KEY (`carrera_idcarrera` ) REFERENCES `muestro_BD1`.`carrera` (`idcarrera` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_carrera_has_sede_sede1` FOREIGN KEY (`sede_idsede` ) REFERENCES `muestro_BD1`.`sede` (`idsede` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ------------------------------------------------------ Table `muestro_BD1`.`materiaXplan` -- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `muestro_BD1`.`materiaXplan` ( `materia_idmateria` INT NOT NULL , `plan_idplan` INT NOT NULL , `semestre` INT NULL , PRIMARY KEY (`materia_idmateria`, `plan_idplan`) , INDEX `fk_materia_has_plan_materia1` (`materia_idmateria` ASC) , INDEX `fk_materia_has_plan_plan1` (`plan_idplan` ASC) , CONSTRAINT `fk_materia_has_plan_materia1` FOREIGN KEY (`materia_idmateria` ) REFERENCES `muestro_BD1`.`materia` (`idmateria` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_materia_has_plan_plan1` FOREIGN KEY (`plan_idplan` ) REFERENCES `muestro_BD1`.`plan` (`idplan` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;

Materia: Base de Datos I Profesor: Calixto Maldonado

- 16 -

Puesta de los seteos en la forma anterior para que no quede alterada la conexin. SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Insercin de filas
Una vez creada las tablas, con la opcin de Workbench, referidas a las Bases de Datos, llamada Forward Engineering to Database, se ejecuta el script generado automticamente transcripto en las paginas anteriores y encontramos con SQL BROWSER, la herramienta usada para ejecutar las sentencias SQL de captulos anteriores. Lo vemos en la figura 6.

Figura 6 Las 11 tablas analizadas y definidas en los pasos anteriores ya estn construidas en la Base de datos, listas para recibir filas.

Las sentencias Insert que permiten grabar filas en las tablas, al haber restricciones o constraints referenciales activas deben ejecutarse en orden, respetando que primero se cargan las filas de las tablas referenciadas, estas son Colegio, Estudiante, Carrera, Materia, Sede. Nuevamente usando

Materia: Base de Datos I Profesor: Calixto Maldonado

- 17 -

Workbench, al hacer click con el botn derecho se genera una sentencia Insert para realizar el trabajo. Ver cuadro 7 y 8

INSERT INTO `colegio` (`idcolegio`, `nombre`, `localidad`) VALUES ( , ,); INSERT INTO `estudiante` (`legajo`, `Apellido`, `Nombre`, `fecha nacimiento`, `tipo documento`, `nro documento`, `sexo`, `promedio`, `domicilioEstudiante`, `domicilioFamiliar`, `colegio_idcolegio`) VALUES ( , , , , , , , , , ,); INSERT INTO `carrera` (`idcarrera`, `nombre`) VALUES ( ,); INSERT INTO `materia` (`idmateria`, `nombre`, `creditos`) VALUES ( , ,); INSERT INTO `sede` (`idsede`, `Nombre`, `domicilio`, `localidad`, `propio`, `fecha de inicio`, `nombre responsable`) VALUES ( , , , , , ,);
Cuadro 7. Sentencias Insert generada automticamente por Workbench

INSERT INTO `colegio` (`idcolegio`, `nombre`, `localidad`) VALUES ( 1,Dean Funes, Crdoba); INSERT INTO `colegio` (`idcolegio`, `nombre`, `localidad`) VALUES ( 2, IEC, Crdoba); INSERT INTO `colegio` (`idcolegio`, `nombre`, `localidad`) VALUES ( 3,Dante Alighieri, Crdoba); INSERT INTO `colegio` (`idcolegio`, `nombre`, `localidad`) VALUES ( 4,IPEM 250 Bialet Masse ,Crdoba); INSERT INTO `estudiante` (`legajo`, `Apellido`, `Nombre`, `fecha nacimiento`, `tipo documento`, `nro documento`, `sexo`, `promedio`, `domicilioEstudiante`, `domicilioFamiliar`, `colegio_idcolegio`) VALUES ( 1,Alvarez , Julieta, 90/03/01 00:00:00, DNI, 303928919,F , 9.60, calle 1 nro 1, null,4); INSERT INTO `estudiante` (`legajo`, `Apellido`, `Nombre`, `fecha nacimiento`, `tipo documento`, `nro documento`, `sexo`, `promedio`, `domicilioEstudiante`, `domicilioFamiliar`, `colegio_idcolegio`) VALUES ( 2, Gomez , Ignacio, 90/06/10 00:00:00, DNI, 30999884, M, 8.60, calle 1 nro 1, calle 221 nro 67, 1); INSERT INTO `estudiante` (`legajo`, `Apellido`, `Nombre`, `fecha nacimiento`, `tipo documento`, `nro documento`, `sexo`, `promedio`, `domicilioEstudiante`, `domicilioFamiliar`, `colegio_idcolegio`) VALUES ( 3, Casas , Nicanor, 89/03/21 00:00:00, DNI, 27033322 , M, 6.85, calle 1 nro 1, calle 44 nro 1212,2); INSERT INTO `estudiante` (`legajo`, `Apellido`, `Nombre`, `fecha nacimiento`, `tipo documento`, `nro documento`, `sexo`, `promedio`, `domicilioEstudiante`, `domicilioFamiliar`, `colegio_idcolegio`) VALUES ( 4, Litvin , Ludmila, 90/07/19 00:00:00, PAS, 9922322, F, 8.36, calle 1 nro 1,null ,3); INSERT INTO `estudiante` (`legajo`, `Apellido`, `Nombre`, `fecha nacimiento`, `tipo documento`, `nro documento`, `sexo`, `promedio`, `domicilioEstudiante`, `domicilioFamiliar`, `colegio_idcolegio`)

Materia: Base de Datos I Profesor: Calixto Maldonado

- 18 -

VALUES ( 5,Alemany , Sofia, 92/03/09 00:00:00, DNI, 30035566 , F , 6.60 , calle 1 nro 1, null, 2); INSERT INTO `estudiante` (`legajo`, `Apellido`, `Nombre`, `fecha nacimiento`, `tipo documento`, `nro documento`, `sexo`, `promedio`, `domicilioEstudiante`, `domicilioFamiliar`, `colegio_idcolegio`) VALUES ( 6,Martin , Alicia, 88/09/19 00:00:00, DNI, 30033322 , F, 7.33, calle 1 nro 1,null, 1);

Cuadro 7 sentencias Insert para crear nuestros primeros colegios y estudiantes

Para las otras tablas cargamos las filas, en archivo aparte quedan las sentencias correspondientes a los Inserts.

Consultas simples
Realizaremos algunas consultas simples para repasar la sintaxis, de lo visto en el capitulo anterior. 1) Mostrar los datos de las Tablas Estudiantes y Carreras, ver figura 7 con el resultado de la primera sentencia, haga Ud. mismo la otra consulta.

Figura 7. Consulta de todas las filas de la tabla estudiante, (para la imagen expuesta se edit el ancho de todas las columnas)

2) Mostrar la cantidad de crditos de las materias y las horas reloj de cada una de ellas considerando que los crditos son las horas semanales de dictado y que existen 16 semanas efectivas de clases en un semestre. Se usa el alias de columna horas Ver figura 8.

Materia: Base de Datos I Profesor: Calixto Maldonado

- 19 -

Figura 8 Resultado de la consulta simple con clculos en el select

2) aplicar condiciones para que solo se muestren las filas que las cumplan, por ejemplo, slo las filas que tienen ms de 100 horas.

Figura 9. Condiciones Simples

3) Enuncie consultas del tipo presentado en las lecturas y ejerctelas.

Consultas complejas
En esta parte iniciaremos con consultas con funciones de grupo y de mltiples tablas y luego las combinaremos. 1) Listar los nombres de los planes y materias asociadas de la carrera CONTADOR PUBLICO, pero solo de aquellos vigentes, esto le obligar a preguntar por la columna `fecha hasta`, note que ya hablamos de las columnas encomilladas y esta es una de ellas (usar la tecla de acento y la barra espaciadora). Sobre esta columna se debe aplicar el operador de comparacin con nulos, not null. En la figura 10 la consulta sin la restriccin de los planes actuales y en la figura 11 la consulta completa y el resultado

Materia: Base de Datos I Profesor: Calixto Maldonado

- 20 -

Figura 10 Consulta de los planes de la carrera de Contador Pblico

Figura 11 Consulta de los planes de la carrera de Contador Pblico, pero slo el vigente

Hemos realizado una consulta que reuni a varias tablas ahora agregaremos funciones de grupo para alcanzar mayor complejidad.

2) Mostrar las carreras y planes vigentes junto con la cantidad de horas que requieren para su cursado. Ver figura 12 para la solucin.

Materia: Base de Datos I Profesor: Calixto Maldonado

- 21 -

Figura 12 Consulta de los planes de todas las carreras, pero slo el vigente, acumulando las horas de todas sus materias. Notar la pregunta por valores nulos.

Hasta aqu llegamos con la lectura presente que busc guiarlos en la aplicacin de todo lo aprendido en un caso real y que esperamos haya contribuido a completar el aprendizaje logrado para alcanzar as los objetivos de la materia.

Materia: Base de Datos I Profesor: Calixto Maldonado

- 22 -

Potrebbero piacerti anche