Anda di halaman 1dari 10

Universidad Catlica del Maule Facultad de Ciencias de la Ingeniera Escuela de Ingeniera Civil Informtica

Informe Modelamiento de Datos

Integrantes:

Marta Mella Villalobos Santiago Fuentes Benavides Ernesto Acevedo Aliste

Docente: Fecha:

Anglica Urrutia 26/06/2012

Enunciado
Soy el socio ms antiguo de una diversificada firma de leyes "Bayley y asociados, maneja una amplia variedad de cases incluyendo violaciones a las leyes del trnsito, disputas domsticas, demandas civiles y casos de homicidios. Hemos guardado informacin con un administrador de bases de datos para organizarlas y tenerlas al da pues la firma creci ms de lo que habamos imaginado y ahora hay caso situados en todos los lugares. Nuestra firma est compuesta por departamentos tales como legislacin, homicidios, etc. y cada caso es asignado a un departamento en particular para propsitos administrativos. Los procuradores tambin son asignados a departamentos particulares, pero este es solo para propsitos de pagos, pues un procurador puede trabajar en casos de otros departamentos. Necesitamos una lista de eventos para cada caso (esencialmente la historia del caso) incluyendo la trayectoria del evento y la fecha en que se hizo efectivo. Los casos tienen que ser identificables por un nmero nico el cual aparece en una lista con la fecha de cada evento y descripcin. Los eventos tienen cdigos especiales como O para abiertos, T para juicios, L para perdidos, habiendo siempre un estado para cada caso. Deseamos mantener importante informacin asociada con los casos incluyendo el departamento al cual es asignado y una breve descripcin. Despus que un caso ha sido cerrado, ste puede ser abierto en una fecha futura, asignamos a los casos reabiertos nuevos nmeros de casos, pero necesitamos unir el nmero de casos nuevos al nmero de casos previos. Los procuradores pueden participar de varios casos de la misma forma que un nmero de personas puede participar en mltiples casos. Nosotros estamos interesados en tener al da la participacin y los roles que ellos jugaron en cada caso. La participacin debe estar identificada por sus nombres y fecha de nacimiento y algn tipo de numeracin nica. Los tipos de personas que pueden estar involucrados en los casos incluye jueces (JG), testigos (EW), acusados (DE) y por su puesto los procuradores (AT), por ejemplo, tenemos el caso de un asesino y estamos trabajando para el acusado. Un procurador es asignado al caso y por supuesto juez presidiendo el caso, hay tambin testigos, entonces hay cuatro personas quienes participan de este caso y nos gustara saber acerca de las cuatro, en este contexto, nosotros no estamos interesados en el procurador por efecto de dinero sino solo por su participacin en el caso. Para elaborar los roles que cada persona puede jugar asumimos que una participacin puede servir en diferentes casos, pero, una participacin puede servir en un rol en un caso dado.

De acuerdo al enunciado, se cre el siguiente modelo relacional utilizando Microsoft Access

Luego, se procedi a normalizar el modelo hasta 3FN.

1FN Se evita el uso de atributos multivaluados al separar la direccin y el telfono de una Persona en tablas distintas, siendo la clave primaria la unin del rut de la Persona ms el otro atributo (telfono o direccin, dependiendo del caso). 2FN La nica dependencia funcional existente es el atributo tipo presente en la tabla Participa, pero ste depende funcionalmente slo de su clave primaria (ID_Caso + rut_persona) por lo que el modelo no presenta problemas. 3FN No existe dependencia transitiva entre los atributos que no sean clave, por lo que se alcanz el nivel 3 de normalizacin.

Posteriormente, se utilizaron la sintaxis SQL para construir la base de datos:

DROP TABLE Eventos; DROP TABLE Participa; DROP TABLE Direcciones; DROP TABLE Telefonos; DROP TABLE Personas; DROP TABLE Casos; DROP TABLE Procuradores; DROP TABLE Departamentos;

CREATE TABLE Departamentos ( ID_Departamento VARCHAR(10) UNIQUE NOT NULL, nombre VARCHAR(20),

CONSTRAINT pk_departamento PRIMARY KEY (ID_Departamento) );

CREATE TABLE Procuradores ( rut VARCHAR(20) UNIQUE NOT NULL, nombre VARCHAR(20), ID_Departamento VARCHAR(10) NOT NULL,

CONSTRAINT pk_procurador PRIMARY KEY (rut), CONSTRAINT fk_departamento FOREIGN KEY (ID_Departamento) REFERENCES Departamentos(ID_Departamento) );

CREATE TABLE Casos( ID_Caso VARCHAR(10) UNIQUE NOT NULL, descripcion VARCHAR(30), fecha VARCHAR(20), rut_Procurador VARCHAR(20) NOT NULL, ID_Departamento VARCHAR(10) NOT NULL, estado VARCHAR(15) NOT NULL, ID_Dependiente VARCHAR(10),

CONSTRAINT pk_caso PRIMARY KEY (ID_Caso), CONSTRAINT fk_procurador FOREIGN KEY (rut_Procurador) REFERENCES Procuradores (rut), CONSTRAINT fk_dpto FOREIGN KEY (ID_Departamento) REFERENCES Departamentos(ID_Departamento) );

CREATE TABLE Personas( rut VARCHAR(20) UNIQUE NOT NULL, nombre VARCHAR(30), edad INT,

CONSTRAINT pk_persona PRIMARY KEY (rut), CONSTRAINT cd_edad CHECK (edad>0) );

CREATE TABLE Telefonos( rut VARCHAR(20) NOT NULL, telefono VARCHAR(10) NOT NULL,

CONSTRAINT pk_telefono PRIMARY KEY(rut, telefono), CONSTRAINT fk_per_tel FOREIGN KEY(rut) REFERENCES Personas(rut) );

CREATE TABLE Direcciones( rut VARCHAR(20) NOT NULL, direccion VARCHAR(50) NOT NULL,

CONSTRAINT pk_direccion PRIMARY KEY(rut, direccion), CONSTRAINT fk_per_dir FOREIGN KEY(rut) REFERENCES Personas(rut) );

CREATE TABLE Participa( ID_Caso VARCHAR(10) NOT NULL, rut VARCHAR(20) NOT NULL, tipo VARCHAR(2) NOT NULL,

CONSTRAINT pk_participa PRIMARY KEY(ID_Caso, rut), CONSTRAINT fk_per_par FOREIGN KEY(rut) REFERENCES Personas(rut), CONSTRAINT fk_per_caso FOREIGN KEY(ID_Caso) REFERENCES Casos(ID_Caso), CONSTRAINT ck_tpo CHECK (tipo IN ('JG','DE','EW')) );

CREATE TABLE Eventos( ID_Evento VARCHAR(10) UNIQUE NOT NULL, codigo VARCHAR(10) NOT NULL, fecha VARCHAR(10), ID_Caso VARCHAR(10) NOT NULL,

CONSTRAINT pk_evento PRIMARY KEY(ID_Evento), CONSTRAINT fk_ev_Caso FOREIGN KEY(ID_Caso) REFERENCES Casos(ID_Caso) );

ALTER TABLE Eventos ADD CONSTRAINT ck_cd CHECK (codigo IN ('O','T','L')); ALTER TABLE Casos ADD CONSTRAINT fk_dep FOREIGN KEY(ID_Dependiente) REFERENCES Casos(ID_Caso);

Otro punto importante es la insercin de datos en las tablas, a continuacin se agrega el script que rellena la base de datos: INSERT INTO Departamentos VALUES('1','Homicidios'); INSERT INTO Departamentos VALUES('2','Familia'); INSERT INTO Departamentos VALUES('3','Trnsito'); INSERT INTO Departamentos VALUES('4','Disputas domsticas'); INSERT INTO Departamentos VALUES('5','Demandas civiles'); INSERT INTO Procuradores VALUES('11.443.819-5','Alberto Muoz','2'); INSERT INTO Procuradores VALUES('13.857.758-8','Juan Prez','1'); INSERT INTO Procuradores VALUES('12.844.535-k','Luis Gutirrez','3'); INSERT INTO Procuradores VALUES('1.696.223-6','Julio Martnez','5'); INSERT INTO Procuradores VALUES('10.333.222-9','Pedro Gutirrez','3'); INSERT INTO Procuradores VALUES('10.444.289-2','Pedro Martnez','4'); INSERT INTO Procuradores VALUES('9.893.422-5','Jos Gonzlez','4'); INSERT INTO Casos VALUES('1','Sin descripcin','24/11/2011','12.844.535-k','3','abierto', null); INSERT INTO Casos VALUES('2','Asesinato','20/06/2012','1.696.223-6','1','abierto', null); INSERT INTO Casos VALUES('3','Demanda','20/07/2012','10.333.222-9','5','abierto', null); INSERT INTO Casos VALUES('4','Demanda','20/07/2012','9.893.422-5','5','abierto', null); INSERT INTO Casos VALUES('5','Asesinato','20/06/2014','1.696.223-6','1','reabierto', '2'); INSERT INTO Eventos VALUES('1','O','01/12/2011','1'); INSERT INTO Eventos VALUES('2','T','10/12/2011','1'); INSERT INTO Eventos VALUES('3','L','15/12/2011','1'); INSERT INTO Eventos VALUES('4','T','03/01/2012','1'); INSERT INTO Eventos VALUES('5','O','13/07/2010','2'); INSERT INTO Eventos VALUES('6','O','21/07/2012','3'); INSERT INTO Eventos VALUES('7','T','24/07/2012','3');

INSERT INTO Personas VALUES('14.723.681-5','Miguel Pea',30); INSERT INTO Personas VALUES('10.468.743-3','Hugo Ramrez',50); INSERT INTO Personas VALUES('12.469.344-4','Juana Prez',44); INSERT INTO Personas VALUES('5.799.444-4','Gonzalo Gonzlez',70); INSERT INTO Personas VALUES('16.858.759-7','Ernesto Acevedo',24); INSERT INTO Personas VALUES('8.799.444-4','Fernando Fernndez',60); INSERT INTO Personas VALUES('11.516.296-5','Romulano Zapata',48); INSERT INTO Personas VALUES('14.306.254-8','Mara Martnez',37); INSERT INTO Direcciones VALUES('16.858.759-7','Bajo los romeros s/n. Molina'); INSERT INTO Direcciones VALUES('12.469.344-4','2 Sur. Talca'); INSERT INTO Direcciones VALUES('5.799.444-4','Yungay 2305. Curic'); INSERT INTO Telefonos VALUES('16.858.759-7','491104'); INSERT INTO Telefonos VALUES('12.469.344-4','556689'); INSERT INTO Telefonos VALUES('12.469.344-4','75854438'); INSERT INTO Telefonos VALUES('5.799.444-4','67829367'); INSERT INTO Telefonos VALUES('5.799.444-4','96571248'); INSERT INTO Telefonos VALUES('11.516.296-5','743892'); INSERT INTO Telefonos VALUES('10.468.743-3','487612'); INSERT INTO Participa VALUES('2','11.516.296-5','JG'); INSERT INTO Participa VALUES('2','5.799.444-4','DE'); INSERT INTO Participa VALUES('2','12.469.344-4','EW'); INSERT INTO Participa VALUES('4','11.516.296-5','DE'); INSERT INTO Participa VALUES('4','5.799.444-4','JG'); INSERT INTO Participa VALUES('1','14.723.681-5','DE'); INSERT INTO Participa VALUES('3','10.468.743-3','JG'); INSERT INTO Participa VALUES('3','16.858.759-7','EW');

INSERT INTO Participa VALUES('3','14.306.254-8','EW'); INSERT INTO Participa VALUES('3','12.469.344-4','DE'); Finalmente, se crean algunas consultas para probar el funcionamiento de la base de datos: Selecciona a todas las personas presentes en los casos, agrupadas segn la id del caso: SELECT Personas.nombre,Participa.rut,Participa.tipo,Participa.ID_Caso FROM Personas INNER JOIN Participa ON Personas.rut=Participa.rut ORDER BY ID_Caso Muestra a todos los Procuradores y los casos que se les han asignado: SELECT Procuradores.nombre,Casos.ID_Caso,Casos.descripcion FROM Casos INNER JOIN Procuradores ON Casos.rut_procurador=Procuradores.rut ORDER BY Procuradores.nombre Lista a todos los procuradores que tengan un nombre similar a 'Guti': SELECT Procuradores.nombre FROM Procuradores WHERE nombre LIKE '%Guti%' Calcula la edad promedio de las Personas: SELECT AVG(edad) FROM Personas Muestra todos los casos en que la descripcin sea 'Demanda' y su procurador se llame 'Pedro': SELECT Eventos.fecha,Eventos.codigo,Casos.descripcion,Procuradores.nombre FROM Eventos INNER JOIN Casos ON (descripcion='Demanda' AND Eventos.ID_Caso=Casos.ID_Caso) INNER JOIN Procuradores ON (Procuradores.nombre LIKE '%Pedro%' AND Procuradores.rut=Casos.rut_Procurador)

Anda mungkin juga menyukai