punto

Anuncio
Segundo Trabajo de Bases de Datos 2 (14%)
Semestre 2015 – 2
Por favor lea todo el enunciado y los ejemplos.
A continuación se presenta una tabla donde se indican los tipos de locales que se pueden
encontrar en un centro comercial:
SITIOS
TIPO
DESCRIPCIÓN
B01
Banco
R01
Restaurante
T01
Tienda de Ropa
T02 Tienda de Calzado
L01
Librería
A continuación se presenta una tabla donde se indican los locales ubicados en un centro
comercial:
CREATE TABLE local(
id NUMBER(8) PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
categoria NUMBER(1) NOT NULL CHECK(categoria BETWEEN 1 AND 5),
tipo VARCHAR(3) NOT NULL,
coordenadas XMLTYPE
);
Ejemplos:
INSERT INTO local VALUES(
0, 'A', 5, 'T01',
XMLTYPE(
'<coordenadas>
<x1>60</x1>
<y1>0</y1>
<x2>80</x2>
<y2>10</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
1, 'B', 5, 'B01',
XMLTYPE(
'<coordenadas>
<x1>10</x1>
<y1>10</y1>
<x2>20</x2>
<y2>20</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
2, 'C', 1, 'L01',
XMLTYPE(
'<coordenadas>
<x1>20</x1>
<y1>20</y1>
<x2>40</x2>
<y2>40</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
3, 'D', 3, 'R01',
XMLTYPE(
'<coordenadas>
<x1>0</x1>
<y1>30</y1>
<x2>10</x2>
<y2>50</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
4, 'E', 2, 'B01',
XMLTYPE(
'<coordenadas>
<x1>80</x1>
<y1>30</y1>
<x2>100</x2>
<y2>50</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
5, 'F', 1, 'R01',
XMLTYPE(
'<coordenadas>
<x1>60</x1>
<y1>40</y1>
<x2>70</x2>
<y2>70</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
6, 'G', 4, 'T02',
XMLTYPE(
'<coordenadas>
<x1>30</x1>
<y1>50</y1>
<x2>50</x2>
<y2>60</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
7, 'H', 2, 'T02',
XMLTYPE(
'<coordenadas>
<x1>0</x1>
<y1>60</y1>
<x2>10</x2>
<y2>90</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
8, 'I', 3, 'T01',
XMLTYPE(
'<coordenadas>
<x1>70</x1>
<y1>70</y1>
<x2>80</x2>
<y2>80</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
9, 'J', 3, 'T01',
XMLTYPE(
'<coordenadas>
<x1>20</x1>
<y1>90</y1>
<x2>30</x2>
<y2>100</y2>
</coordenadas>'
)
);
INSERT INTO local VALUES(
10, 'K', 2, 'L01',
XMLTYPE(
'<coordenadas>
<x1>90</x1>
<y1>90</y1>
<x2>100</x2>
<y2>100</y2>
</coordenadas>'
)
);
A continuación se presenta una tabla donde se indican las trayectorias de visitantes (las
trayectorias de cada visitante corresponden a un solo día):
CREATE OR REPLACE TYPE
nest_docsXML AS TABLE OF XMLTYPE;
/
CREATE TABLE historial_visitante(
identificacion NUMBER(8) PRIMARY KEY,
trayectorias nest_docsXML
)NESTED TABLE trayectorias STORE AS store_trayectorias;
Ejemplos:
INSERT INTO historial_visitante VALUES(
1,
nest_docsXML(
XMLTYPE('<trayectoria>
<punto>
<x>40</x>
<y>0</y>
<tiempo>8:00</tiempo>
</punto>
<punto>
<x>50</x>
<y>0</y>
<tiempo>8:05</tiempo>
</punto>
<punto>
<x>20</x>
<y>20</y>
<tiempo>8:10</tiempo>
</punto>
<punto>
<x>10</x>
<y>50</y>
<tiempo>8:20</tiempo>
</punto>
<punto>
<x>20</x>
<y>50</y>
<tiempo>8:25</tiempo>
</punto>
<punto>
<x>50</x>
<y>70</y>
<tiempo>8:35</tiempo>
</punto>
</trayectoria>')
)
);
INSERT INTO historial_visitante VALUES(
2,
nest_docsXML(
XMLTYPE('<trayectoria>
<punto>
<x>10</x>
<y>10</y>
<tiempo>15:00</tiempo>
</punto>
<punto>
<x>0</x>
<y>20</y>
<tiempo>15:05</tiempo>
</punto>
<punto>
<x>0</x>
<y>100</y>
<tiempo>15:10</tiempo>
</punto>
</trayectoria>'),
XMLTYPE('<trayectoria>
<punto>
<x>30</x>
<y>30</y>
<tiempo>6:29</tiempo>
</punto>
<punto>
<x>80</x>
<y>60</y>
<tiempo>6:48</tiempo>
</punto>
<punto>
<x>50</x>
<y>80</y>
<tiempo>6:49</tiempo>
</punto>
<punto>
<x>40</x>
<y>100</y>
<tiempo>6:55</tiempo>
</punto>
<punto>
<x>20</x>
<y>100</y>
<tiempo>7:02</tiempo>
</punto>
</trayectoria>')
)
);
INSERT INTO historial_visitante VALUES(
3,
nest_docsXML(
XMLTYPE('<trayectoria>
<punto>
<x>60</x>
<y>40</y>
<tiempo>23:11</tiempo>
</punto>
<punto>
<x>60</x>
<y>20</y>
<tiempo>23:17</tiempo>
</punto>
<punto>
<x>70</x>
<y>10</y>
<tiempo>23:29</tiempo>
</punto>
<punto>
<x>80</x>
<y>20</y>
<tiempo>23:39</tiempo>
</punto>
<punto>
<x>100</x>
<y>30</y>
<tiempo>23:43</tiempo>
</punto>
<punto>
<x>90</x>
<y>40</y>
<tiempo>23:47</tiempo>
</punto>
<punto>
<x>100</x>
<y>60</y>
<tiempo>23:54</tiempo>
</punto>
</trayectoria>') ,
XMLTYPE('<trayectoria>
<punto>
<x>10</x>
<y>100</y>
<tiempo>11:29</tiempo>
</punto>
<punto>
<x>50</x>
<y>80</y>
<tiempo>11:48</tiempo>
</punto>
<punto>
<x>90</x>
<y>90</y>
<tiempo>12:49</tiempo>
</punto>
</trayectoria>')
)
);
La siguiente figura corresponde al mapa del centro comercial definida en la tabla “local” y las
líneas corresponden a las trayectorias de la tabla “historial_visitante” donde cada una de las
líneas está compuesta por los puntos indicados en el documento XML y corresponde a la posición
de cada visitante en el tiempo indicado. Entre punto y punto (puntos contiguos temporalmente)
de una trayectoria se traza una línea recta.
1) (Triggers). El centro comercial está delimitado por los puntos (0, 0) y (100, 100).
Tener en cuenta:
Categoría promedio: promedio de las categorías de todos los locales visitados por una
misma trayectoria. Si se visita más de una vez un mismo local, por ejemplo, el local con
id 5, solo se tiene en cuenta una vez para el cálculo del promedio.
Pasar por un local: implica atravesarlo, no pasar por alguno de sus bordes. Es necesario
que la trayectoria del visitante atraviese el local para asegurar que ingresó a este.
Se debe controlar que:
-
-
-
(10%) Las trayectorias de un mismo visitante sean disjuntas en el tiempo, por ejemplo,
el visitante 1 tiene una trayectoria que ocurrió entre las 8 y las 8:35, entonces ninguna
otra de sus trayectorias puede tener un punto entre las 8 y las 8:35. Suponga que los
tiempos de cada trayectoria ya vienen ordenados ascendentemente.
(15%) Como se observa en el ejemplo presentado, ES VÁLIDO QUE UNA
TRAYECTORIA PASE (ingrese y salga por cualquier parte del local) por uno o más
tipos de locales. Sin embargo, una trayectoria puede como máximo pasar por 3 tipos
distintos de locales (una trayectoria puede pasar varias veces por un mismo local).
(15%) Cada local tiene una categoría. Sin embargo, la categoría promedio de los
locales pasados por una trayectoria no debe ser inferior a 3.
2) (10%) Desarrolle un programa en Java que grafique el mapa correspondiente a la ciudad
con sus respectivos locales, coloreando cada tipo de local con un color diferente. (En
clase se explicó la conexión entre Java y Oracle y como dibujar líneas y figuras).
3) El programa en Java debe tener opciones que permitan:
a) (10%) El usuario ingresa una identificación de un visitante y se deben graficar solo
las trayectorias del visitante ingresado. Se debe mostrar cada trayectoria con su
respectiva categoría promedio (si la trayectoria no pasó por ningún local, su
promedio predeterminada es cero).
b) (15%) El usuario ingresa un número n y se deben mostrar las n trayectorias con
mayor categoría promedio.
c) (15%) Imprimir la pareja de trayectorias que más tipos de locales (B01, R01, T01,
T02, L01) visitaron en común.
d) (10%) Suponga que usted tiene trayectorias como las mostradas en este trabajo.
Plantee cuatro problemas, tan sencillos o tan complejos como desee, que se
podrían plantear sobre trayectorias, por ejemplo, encontrar las dos trayectorias
que son más similares en forma, encontrar las tres trayectorias más cortas que
han recorrido todos los locales, etc. Implemente en Java la solución solo a uno
de sus cuatro problemas, el que usted desee.
Notas adicionales
 Puede manejar la escala como desee de tal forma que los objetos sean visibles.
 Mientras cumpla con las condiciones solicitadas, puede hacer todas las suposiciones
que desee.
 Nota: Sus soluciones deben funcionar para cualquier cantidad de filas que tengan las
tablas: existen muchos locales, muchos visitantes cada uno con muchas trayectorias. Los
datos presentados son solo para efectos de ejemplificación.
 No modifique la estructura de las tablas dadas: no cambie los nombres ni les adicione ni
les quite columnas. No hay necesidad de verificar la estructura de los documentos XML,
se garantiza que estos cumplirán la estructura dada en los ejemplos.
 Puede usar todas las estructuras de datos y todas las tablas auxiliares que desee. Puede
usar todas las funciones que des
 ee del API de XML de Oracle. Puede usar XPath, XQuery y todas las librerías de Java
que desee.
 Para entregar impreso y por email a [email protected], el viernes 30 de Octubre al
inicio de clase.
 No se reciben trabajos en hora posterior. No se reciben versiones “mejoradas”.
 Para la parte impresa solo se debe imprimir un informe donde se describa cómo se
solucionó cada punto. No imprimir el código. Por email SÍ se debe enviar todo el código.
 Grupos máximo de tres personas.
 Los trabajos deben ser independientes entre los grupos. Trabajos copiados así sea en un
SOLO punto se califican con 0 (cero) en su totalidad para todos los integrantes. Las
soluciones presentadas deben ser originales, concebidas por cada grupo, no copiadas de
medios como páginas web, foros, librerías de programas existentes, etc. El trabajo debe
ser desarrollado por los integrantes del grupo no por personas ajenas a él.
 Cualquier duda consultarla personalmente o por email con el profesor.
 Los monitores les pueden ayudar con aspectos técnicos pero su función no es hacerles
la práctica ni está autorizado para cambiarles las condiciones del trabajo.
F. Moreno
Octubre 6 de 2015.
Documentos relacionados
Descargar