Sei sulla pagina 1di 14

Unversidad Cenfotec Bases de Datos Relacional-Objeto Profesor Ing. Marco A.

Hernndez Vsquez

Examen 1 Elaborado por Luis West Grant

Septiembre 2012

Introduccin

El presente trabajo ser ejecutado usando los conocimientos adquiridos en el curso y prcticas desarrolladas, el mismo trata de la implementacin de un modelo objeto relacional sobre el motor de base de datos UDB DB2. Se utilizar la base de datos DB2 Express-C de la IBM por medio de la herramienta IBM Data Studio, para la ejecucin de las diferentes sentencias SQL solicitadas en el documento gua, adems de la implementacin de cdigo solicitado en la misma, esto con el fin de lograr un mejor entendimiento y comprensin de este modelo de base de datos. Se harn capturas de pantalla de las consultas, esto con el fin de evidenciar el correcto funcionamiento de cada una de la sentencias, mostrando los valores devueltos luego de la ejecucin de cada uno de ellos.

DESARROLLO CDIGOS SQL

--

Tipos de datos definidos por usuario--

CREATE TYPE nombre_completo_t AS( nombre varchar(30), primer_apellido varchar(20), segundo_apellido varchar(20) )MODE DB2SQL; CREATE TYPE imagen_t AS( nombre varchar(20), imagen blob(10m) )MODE DB2SQL; CREATE TYPE telefono_t AS( codigo_pais integer, telefono integer, movil integer )MODE DB2SQL; --Implementacion--- ---------------------------------------------CREATE TYPE direccion_t AS ( provincia varchar(20), canton varchar(20), distrito varchar(20), barrio varchar (20), urbanizacion varchar (20)) MODE DB2SQL; -- ---------------------------------------------CREATE TYPE usuario_t AS( usuario varchar(10), contrasenna varchar(20)) MODE DB2SQL; CREATE TYPE persona_t AS ( nombre nombre_completo_t, telefono telefono_t, fecha_nacimiento date, foto imagen_t, direccion direccion_t) MODE DB2SQL; --Implementacion--- ---------------------------------------------CREATE TYPE socio_t UNDER persona_t AS ( usuario usuario_t, fecha_asociacion date) MODE DB2SQL; -- ----------------------------------------------

CREATE TYPE empleado_t UNDER socio_t AS( salario integer )MODE DB2SQL; CREATE TYPE inmueble_t AS( inscripcion varchar(50), propietario ref(persona_t), direccion direccion_t, plano imagen_t, foto imagen_t, valor integer, medida integer, descripcion varchar(200) )MODE DB2SQL; CREATE TYPE casa_t UNDER inmueble_t AS( ambientes integer, habitaciones integer, cocheras integer, banno integer, plantas integer )MODE DB2SQL; CREATE TYPE apartamento_t UNDER inmueble_t AS( ambientes integer, habitaciones integer, cocheras integer, banno integer )MODE DB2SQL; CREATE TYPE condominio_t UNDER inmueble_t AS( casas integer, canchas integer, piscinas integer )MODE DB2SQL;

--Implementacion--- ---------------------------------------------CREATE TYPE edificio_t UNDER inmueble_t AS ( pisos integer, OFicinas integer) MODE DB2SQL; -- ---------------------------------------------CREATE TYPE lote_t UNDER inmueble_t AS( construccion varchar(4)) MODE DB2SQL;

--

Funciones definidas por usuario--

CREATE FUNCTION nombre_transform(addr nombre_completo_t) returns varchar(75) language sql return addr..nombre || ', ' || addr..primer_apellido || ', ' || addr..segundo_apellido; CREATE transform for nombre_completo_t db2_program ( FROM sql WITH FUNCTION nombre_transform ); CREATE FUNCTION imagen_transform(addr imagen_t ) returns varchar(20) language sql return addr..nombre; CREATE transform for imagen_t db2_program ( FROM sql WITH FUNCTION imagen_transform); CREATE FUNCTION telefono_transform(addr telefono_t ) returns varchar(25) language sql return addr..codigo_pais || ', ' || addr..telefono || ', ' || addr..movil; CREATE transform for telefono_t db2_program ( FROM sql WITH FUNCTION telefono_transform); --Implementacion--- ---------------------------------------------CREATE FUNCTION direccion_transform(dir direccion_t) returns varchar(170) language sql return dir..provincia || ', ' || dir..canton || ', ' || dir..distrito || ', ' || dir..barrio || ', ' || dir..urbanizacion; CREATE transform for direccion_t db2_program ( FROM sql WITH FUNCTION direccion_transform); -- ----------------------------------------------

CREATE FUNCTION calculo_iva_salario_transform (sal integer) returns integer language sql return sal*0.13;

--

Implementacin de tablas tipeadas--

CREATE TABLE t_persona OF persona_t( REF IS OID USER GENERATED, nombre WITH OPTIONS NOT NULL); CREATE TABLE t_socio OF socio_t UNDER t_persona INHERIT SELECT PRIVILEGES; --Implementacin--- ---------------------------------------------CREATE TABLE t_empleado OF empleado_t UNDER t_socio INHERIT SELECT PRIVILEGES; -- ---------------------------------------------CREATE TABLE t_inmueble OF inmueble_t ( REF IS OID USER GENERATED, inscripcion WITH OPTIONS NOT NULL, propietario WITH OPTIONS SCOPE t_persona);

--Implementacin -- ---------------------------------------------CREATE TABLE t_casa OF casa_t UNDER t_inmueble INHERIT SELECT PRIVILEGES; CREATE TABLE t_apartamento OF apartamento_t UNDER t_inmueble INHERIT SELECT PRIVILEGES; CREATE TABLE t_edificio OF edificio_t UNDER t_inmueble INHERIT SELECT PRIVILEGES; CREATE TABLE t_condominio OF condominio_t UNDER t_inmueble INHERIT SELECT PRIVILEGES; CREATE TABLE t_lote OF lote_t UNDER t_inmueble INHERIT SELECT PRIVILEGES; -- ----------------------------------------------

--

Agregando Datos--

INSERT INTO t_socio (OID, nombre,usuario) VALUES (socio_t('s1'), nombre_completo_t()..nombre('marco') .. primer_apellido('hernndez')..segundo_apellido('vsquez'), usuario_t()..usuario('usr')); INSERT INTO t_empleado (OID, nombre, usuario, salario) VALUES (empleado_t('e1'), nombre_completo_t()..nombre('vivian') .. primer_apellido('chacon') ..segundo_apellido('palma'), usuario_t()..usuario('usr'), 1000); INSERT INTO t_socio (OID, nombre,usuario) VALUES (socio_t('s2'), nombre_completo_t()..nombre('marco') .. primer_apellido('hernndez') ..segundo_apellido('vsquez'), usuario_t()..usuario('usr')); INSERT INTO t_socio (OID, nombre,usuario) VALUES (socio_t('s3'), nombre_completo_t()..nombre('juanito') .. primer_apellido('perez')..segundo_apellido('redondo'), usuario_t()..usuario('usr')); INSERT INTO t_socio (OID, nombre,usuario) VALUES (socio_t('s4'), nombre_completo_t()..nombre('isabella') .. primer_apellido('tendini') , usuario_t()..usuario('usr')); INSERT INTO t_persona VALUES (persona_t('p1'), nombre_completo_t..nombre('luis')..primer_apellido('arias')..segundo_apell ido('solis'), telefono_t..codigo_pais(506)..telefono(22295687)..movil(88357841), '198410-11', imagen_t..nombre('foto 1')..imagen(blob(x'1234')), direccion_t..provincia('san jose')..canton('escazu')..distrito('san antonio')..barrio('el carmen')..urbanizacion('loma linda')); INSERT INTO t_empleado VALUES (empleado_t('e3'), nombre_completo_t..nombre('sOFia')..primer_apellido('salazar')..segundo_ap ellido('herrer a'), telefono_t..codigo_pais(506)..telefono(22899097)..movil(88942861), '198703-16', imagen_t..nombre('foto 3')..imagen(blob(x'1234')), direccion_t..provincia('san jose')..canton('escazu')..distrito('guachipelin')..barrio('laureles')..urb anizacion('el roble'), usuario_t..usuario('sOFherr')..contrasenna('holamundo'),'2007-01-10', 5000);

INSERT INTO t_apartamento VALUES ( apartamento_t('a1'), '99-87464-44894', persona_t('p1'), direccion_t..provincia('alajuela')..canton('alajuela')..distrito('carrizal ')..barrio( 'el plan')..urbanizacion('las giraldas'), imagen_t..nombre('plano 1')..imagen(blob(x'1234')), imagen_t..nombre('foto 1')..imagen(blob(x'1234')), 34000000, 200,'200 metros cuadrados', 1,2,1,1); INSERT INTO t_condominio VALUES (condominio_t('co1'), '5613-4684-4646', persona_t('p1'), direccion_t..provincia('san jose')..canton('escazu')..distrito('san miguel')..barrio('corazon de jesus')..urbanizacion('los olivos'), imagen_t..nombre('plano 1')..imagen(blob(x'1234')), imagen_t..nombre('foto 1')..imagen(blob(x'1234')), 85000000, 450,'450 metros cuadrados', 2,3,1); INSERT INTO t_lote (construccion, inscripcion, propietario, OID, valor, medida) VALUES ('abc', '123', empleado_t('e3'), lote_t('lo1'), 100, 250);

--Implementacin--- ---------------------------------------------INSERT INTO t_socio VALUES (socio_t('s5'), nombre_completo_t..nombre('luis')..primer_apellido('west')..segundo_apelli do('grant'), telefono_t..codigo_pais(506)..telefono(27569097)..movil(88352867), '197103-16', imagen_t..nombre('foto 4')..imagen(blob(x'1532')), direccion_t..provincia('limon')..canton('limon')..distrito('limon')..barri o('cristobal')..urbanizacion('cristobal'), usuario_t..usuario('west')..contrasenna('wesito'),'2012-03-11'); INSERT INTO t_condominio VALUES (condominio_t('co2'), '5613-4684-4646', persona_t('p2'), direccion_t..provincia('limn')..canton('talamanca')..distrito('bratsi').. barrio('bribri')..urbanizacion('bribri'), imagen_t..nombre('plano 2')..imagen(blob(x'1234')), imagen_t..nombre('foto 2')..imagen(blob(x'1234')), 105000000, 1000,'1 hectarea', 3,1,1); INSERT INTO t_empleado VALUES (empleado_t('e4'), nombre_completo_t..nombre('mara')..primer_apellido('cooper')..segundo_ape llido('suazo'), telefono_t..codigo_pais(506)..telefono(27515350)..movil(88342871), '197706-16', imagen_t..nombre('foto 4')..imagen(blob(x'1234')), direccion_t..provincia('limon')..canton('pococi')..distrito('guapiles')..b arrio('laureles')..urbanizacion('guapiles'),

usuario_t..usuario('maria')..contrasenna('secreto'),'2011-01-10', 11000); INSERT INTO t_persona VALUES (persona_t('p3'), nombre_completo_t..nombre('joyce')..primer_apellido('west')..segundo_apell ido('grant'), telefono_t..codigo_pais(506)..telefono(27685525)..movil(88357891), '196410-12', imagen_t..nombre('foto 6')..imagen(blob(x'1234')), direccion_t..provincia('limon')..canton('limon')..distrito('limon')..barri o('cristobal colon')..urbanizacion('cieneguita')); INSERT INTO t_empleado VALUES (empleado_t('e5'), nombre_completo_t..nombre('jazlyne')..primer_apellido('west)..segundo_apel lido('cooper'), telefono_t..codigo_pais(506)..telefono(27585350)..movil(8895871), '199706-16', imagen_t..nombre('foto 5')..imagen(blob(x'1234')), direccion_t..provincia('limon')..canton('limon')..distrito('matama')..barr io('bomba')..urbanizacion('la bomba'), usuario_t..usuario('tatiana')..contrasenna('misecre'),'2012-03-10', 12500); INSERT INTO t_apartamento VALUES ( apartamento_t('a2'), '99-87464-32894', persona_t('p3'), direccion_t..provincia('alajuela')..canton('alajuela')..distrito('carrizal ')..barrio( 'el plan')..urbanizacion('centro'), imagen_t..nombre('plano 11')..imagen(blob(x'1234')), imagen_t..nombre('foto 11')..imagen(blob(x'1234')), 3400000, 200,'120 metros cuadrados', 1,1,1,1); INSERT INTO t_lote VALUES ( lote_t('l2'), '90-87464-32894', persona_t('p3'), direccion_t..provincia('heredia')..canton('central')..distrito('primero'). .barrio( 'flores')..urbanizacion('flores'), imagen_t..nombre('plano 13')..imagen(blob(x'1234')), imagen_t..nombre('foto 13')..imagen(blob(x'1234')), 2400000, 180,'180 metros cuadrado en montaa', 'def'); INSERT INTO t_edificio VALUES ( edificio_t('e1'), '90-87464-32894', persona_t('p3'), direccion_t..provincia('puntarenas')..canton('puntarenas')..distrito('barr anca')..barrio( 'roble')..urbanizacion('roble'), imagen_t..nombre('plano 12')..imagen(blob(x'1234')), imagen_t..nombre('foto 12')..imagen(blob(x'1234')), 13400000, 160,'160 metros de construccion', 2,8); -- ----------------------------------------------

--

Consultas

SELECT DEREF(OID)..nombre..nombre, DEREF(OID)..nombre..primer_apellido, nombre..nombre, nombre..primer_apellido, nombre..segundo_apellido, telefono..codigo_pais, telefono..telefono, telefono..movil, fecha_nacimiento, foto, direccion..provincia, direccion..canton, direccion..distrito, direccion..barrio, direccion..urbanizacion FROM t_persona; Resultado

SELECT nombre..nombre, nombre..primer_apellido, telefono..codigo_pais, telefono..telefono, telefono..movil, fecha_nacimiento, TYPE_name(DEREF(OID)) FROM t_persona; Resultado

SELECT nombre..nombre, nombre..primer_apellido, telefono..codigo_pais, telefono..telefono, telefono..movil, fecha_nacimiento, TYPE_name(DEREF(OID)) FROM t_persona WHERE DEREF(OID) IS OF (only empleado_t); Resultado

--Implementacin -- ---------------------------------------------SELECT DEREF(propietario)..nombre AS nombre_propietario, TYPE_NAME(DEREF(propietario))AS tipo_persona, TYPE_NAME(DEREF(OID)) AS tipo_inmueble, valor AS valor_inmueble, DEREF(propietario)..telefono..movil AS movil_persona FROM t_inmueble; Resultado

SELECT DEREF(propietario)..nombre AS nombre_propietario,valor, TYPE_name(DEREF(OID)) AS tipo_inmueble FROM t_inmueble WHERE (DEREF(propietario)..telefono..movil = '88357841') and (DEREF(OID) IS OF(only apartamento_t)); Resultado

-- ----------------------------------------------

Conclusiones
El presente trabajo prctico, adems de reforzar la teora obtenida en clases e investigaciones, sirvi su propsito, el cual era el mejor entendimiento de algunos comandos y su forma correcta de uso; adems un poco de investigacin sobre el modelado de este tipo de base de datos dio la luz sobre la afectacin que ha sufrido el diseo de las bases de datos para adaptarlo al creciente mundo de la implementacin de sistemas basados en modelos de objetos. Pude observar que al insertar un nuevo elemento en una tabla, esta insercin puede afectar varias tablas al mismo tiempo, ahorrando as el trabajo al programar la aplicacin que utilizar esta base de datos; con las consultas desarrolladas pude conocer y comprender varias funcionalidades muy interesantes tales como el hecho de mostrar en una consulta el tipo de dato relacionado a una columna, y fue muy interesante saber que se puede mostrar informacin de varias tablas, sin necesidad de hacer uniones explicitas de tablas, utilizando tan solo una tabla derivada. Adems gracias a este trabajo prctico, pude obtener una mejor comprensin de la funcionalidad y uso de algunos comandos o funciones tales como el REF, DEREF o sentencias como el DEREF() IS OF, entre otros. Las mejoras en la base de datos, con respecto al modelo de implementacin utilizado y desarrollo de la misma, tiene la finalidad firme de ver el desarrollo de una forma ms conceptual, facilitando as la comunicacin entre el encargado del diseo del sistema y el desarrollador de las bases de datos, y muy importante la buena comunicacin entre el cliente y el desarrollador.

Potrebbero piacerti anche