La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Proyecto DE BASE DE DATOS

Presentaciones similares


Presentación del tema: "Proyecto DE BASE DE DATOS"— Transcripción de la presentación:

1 Proyecto DE BASE DE DATOS
GESTIÓN DE RESERVAS DE HOTEL José Jesús Marente Florín Daniel Payán Alcedo Tecnología Avanzada de Bases de Datos Universidad de Cádiz

2 Puntos a tratar Especificaciones funcionales Tipos y métodos
Diagrama de clases persistentes (UML) Tipos y métodos Disparadores y procedimientos Interfaces de usuario – despliegue CONCLUSIONES

3 Especificaciones funcionales
El sistema a modelar trata de la reserva de habitaciones de un hotel por parte de personas, las cuales serán empleados (personal del hotel) y clientes (no empleados que hayan realizado alguna vez alguna reserva). Estas personas podrán realizar reservas de habitaciones, cada una con diferentes ventajas económicas: Empleados: se beneficiarán del 30% de descuento por cada reserva Clientes, deben tener almacenado un descuento, que lo asignará el sistema dependiendo del número de reservas que haya realizado, es decir, entre 2 y 3, un 5%, entre 4 y 8 el 10% más de 8 reservas, el 20 %.

4 Especificaciones funcionales
El hotel envía ofertas tanto a empleados como a clientes, dichas ofertas deberán guardar las fechas de ésta, su descripción y el precio. El hotel dispone de habitaciones, las cuales se caracterizan por: el número (el cual será único en el hotel), la planta donde se encuentra (será el primer dígito del número de habitación, pues solo tenemos 5 plantas), la categoría, que será simple, doble o suit, la descripción de ese tipo de habitación y el precio de la misma al día.

5 Especificaciones funcionales
Respecto a las reservas de habitaciones por las personas (máximo 5 por reserva), se guardarán las siguientes características, la fecha de inicio, la de fin, algún comentario sobre preferencias del cliente de esa reserva y el precio de la reserva, al cual se le aplicará el descuento de la persona que haya realizado la reserva. Para cancelar la reserva, el cliente deberá hacerlo como máximo un día antes de la fecha de inicio de la reserva, con el motivo de la misma. En este caso, la reserva de dicho cliente no se debe contabilizar como posible descuento en otras reservas. Una vez que se cancele, ésta no se podrá habilitar de nuevo, permanecerá cancelada.

6 DIAGRAMA DE CLASES PERSISTENTES
Generalización / especialización Atributo Compuesto Atributo Multievaluado Polimorfismo

7 DIAGRAMA DE CLASES PERSISTENTES
Asociación N:N Asociación 1:N getPrecio() = descuento de persona * días de reserva * precio habitaciones

8 DIAGRAMA DE CLASES PERSISTENTES
Agregación Composición 1:1

9 Tipos creados Tipo Dirección Tipo Habitación Tipo Cancelación
Necesario para almacenar la dirección completa en Persona. Tipo Habitación Tipo Cancelación Tipo Persona Tipo Empleado Tipo Cliente Tipo Reserva

10 Métodos Obtener descuento en Cliente Obtener descuento de Empleado
Devuelve el descuento que posee el cliente, según el número de reservas no canceladas que haya realizado Obtener descuento de Empleado Devuelve el descuento que posee el empleado. Siempre será del 30%. Obtener precio en reserva Devuelve el precio de la reserva, teniendo en cuenta todas las habitaciones reservadas, días de la duración de la reserva y el descuento aplicado, según que persona realizó la reserva. Obtener planta en habitación Devuelve la planta en la que se encuentra la habitación según el número de esta.

11 Disparadores Disparador cancelación no permitida
Una reserva se puede cancelar con un día de antelación como máximo. Este disparador controlará que dicha cancelación se realice dentro del plazo. Disparador Reserva sin cancelar No permite crear en el sistema una nueva reserva que ya esté cancelada desde un principio

12 Procedimientos Todas las operaciones sobre la Base de Datos, se realizan usando procedimientos. Insertar Cliente Insertar Empleado Inserta nuevos clientes y empleados. Modificar Cliente Modificar Empleado Procedimientos que modifican únicamente los datos de los empleados y clientes Eliminar Persona Elimina a la persona y a todas las reservas realizada por esa persona

13 Procedimientos Procedimientos encargados de controlar la bidireccionalidad entre persona y reserva. Insertar Reserva Inserta la nueva reserva, la relaciona con la persona y a su vez relaciona a la persona con esa reserva. Modificar Reserva Modifica los datos de la reserva y si se da el caso, modificar la persona con la que se relaciona y desvincula a la persona anterior. Eliminar Reserva Elimina la reserva y la relación que existía entre la persona y la reserva

14 Procedimiento Modificar reserva
/* realizada_por Tipo_Persona; CREATE OR REPLACE PROCEDURE ModificaReserva realizadas Tipo_Realiza; realizadas_actualizadas Tipo_Realiza; ( reserva Tipo_Reserva; idRes VARCHAR2, i NUMBER; nuevafechaInicio VARCHAR2, indice NUMBER; nuevafechaFin VARCHAR2, cambiarPersona boolean; nuevoscomentarios CLOB, BEGIN DNIPer VARCHAR2, IdHabbitaciones Tipo_VectorCadenas DESVINCULAMOS A LA PERSONA ) */ IS SELECT DEREF(realizadaPor) INTO realizada_por FROM Tabla_Reserva WHERE IdReserva = to_number(idRes); RefPersona REF Tipo_Persona; RefReserva REF Tipo_Reserva; ListaRefHab Tipo_ListaHabitaciones; cambiarPersona := false; RefHab1 REF Tipo_Habitacion;

15 Procedimiento Modificar reserva
IF realizada_por.DNI != DNIPer THEN cambiarPersona := true; -- realizadas almacena el nested tabla de ref a reservas de esa persona select realiza into realizadas from Tabla_Persona where idPersona = realizada_por.idpersona; -- var de tipo nested table de ref de reservas realizadas_actualizadas := Tipo_Realiza(); indice := 1; -- creamos en el nested table de ref a reservas temporal -- las mismas reservas que tenía pero sin la actual FOR i IN 1..realizadas.count LOOP UTL_REF.SELECT_OBJECT(realizada s(i), reserva); IF reserva.idReserva != to_number(idRes) THEN realizadas_actualizadas.EXTEND(); realizadas_actualizadas(indice) := realizadas(i); indice := indice + 1; END IF; END LOOP;

16 Procedimiento Modificar reserva
/* UPDATE Tabla_Reserva set MODIFICAMOS LA RESERVA FechaInicio = to_date(nuevafechaInicio,'DD/MM/YYYY'), */ -- Seleccionamos persona FechaFin = to_date(nuevafechaFin,'DD/MM/YYYY'), -- Fecha Fin select REF(t) into RefPersona from Tabla_Persona t Where t.DNI = DNIPer; comentarios = nuevoscomentarios, -- Comentarios -- var que almacenará la lista de ref a habitaciones de esa reserva RealizadaPor = RefPersona, -- Referencia a Row de Tabla_Persona ListaRefHab := Tipo_ListaHabitaciones(); SeCancela = NULL, -- Cancelaciones FOR i IN 1..IdHabbitaciones.count LOOP TieneHabitaciones = ListaRefHab -- refs a habitaciones SELECT REF(H) INTO RefHab1 FROM Tabla_Habitacion H WHERE H.IDHabitacion = IdHabbitaciones(i); WHERE IdReserva = to_number(idRes); ListaRefHab.extend(); ListaRefHab(i) := RefHab1; END LOOP; -- actualizamos la reserva

17 Procedimiento Modificar reserva
/* VINCULAMOS A LA NUEVA PERSONA EN CASO DE QUE SEA OTRA UPDATE Tabla_Persona SET realiza = realizadas WHERE DNI = DNIPer; */ IF cambiarpersona = true THEN END IF; EXCEPTION SELECT REF(t) INTO RefReserva FROM Tabla_Reserva t WHERE t.IdReserva = idRes; -- Algún tipo de error en la consulta de datos agregados WHEN OTHERS THEN SELECT realiza INTO realizadas FROM Tabla_Persona WHERE DNI = DNIPer; --Lanzamos excepción raise_application_error(-20010,'No se puede MODIFICAR reserva' ||SQLCODE||' -ERROR- '||SQLERRM); -- En su nested table de ref a reservas de esa nueva persona -- incluimos esta reserva i := realizadas.count; END ModificaReserva; realizadas.EXTEND(); realizadas(i+1) := RefReserva;

18 Interfaces de usuario Como interface de usuario se ha optado por JDBC y Java para aplicaciones de escritorio (uso de librería Swing,) con los clásicos formularios, botones, desplegables y ventanas. Para poder disponer de la API JDBC : import java.sql.*;  Pero para disponer de las extensiones del modelo relacional de Oracle (implementación de JDBC para ORACLE con “ojdbc6.jar”): import oracle.jdbc.driver.*; import oracle.sql.*; Capturar las excepciones de PLSQL: } catch (SQLException ex) { JOptionPane.showMessageDialog(frame, "Error:" + ex.getMessage());

19 Interfaces de usuario Implementamos BD.java, clase singleton que controla en todo momento la conexión con Oracle, desde el logon, pasando por las sucesivas operaciones DML y su posterior desconexión. El siguiente fragmento muestra el núcleo principal de conexión: Connection conn; try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); String url = conn = DriverManager.getConnection(url,nombre,passwd); conn.setAutoCommit(false); } catch (SQLException e) { error = e.getMessage(); La variable conn nos permita todas las operaciones de manejo de datos con Oracle.

20 Interfaces de usuario Aunque se permita las operaciones INSERT, UPDATE o DELETE desde código java, se establece hacer todo este tipo de operaciones DML a través de procedimientos almacenados. Ejemplo insertarcliente: private void insertarCliente(){ BD OraBD = BD.getInstance(); try { OraBD.conn.setAutoCommit(true); CallableStatement pstm1 = OraBD.conn.prepareCall ("{ call InsertaCliente(?,?,?,?,?,?,?,?,?,?,?,?) }"); //Controlamos el DNI if("".equals(DNI.getText())){ pstm1.setString(1, null); }else{ pstm1.setString(1, DNI.getText()); } //Controlamos el nombre ….. ………. Demás campos pstm1.execute();

21 despliegue Crear usuario y dar permisos con grant
SQL> create user tabd SQL> grant connect to tabd; Ejecutar scripts de creación de tipos, tablas, secuencias, disparadores y procedimientos SQL> connect tabd Lanzar la aplicación : Ejecutar el fichero GUIDBD.jar desde escritorio Desde consola: java –jar GUIDBD.jar

22 DEMOstración

23 conclusiones EL tratamiento de las extensiones del modelo objeto-relacional de Oracle conlleva un mayor esfuerzo si se compara con el modelo relacional (mayor curva de aprendizaje). Todavía se aprecia más dicha complejidad si se contempla la bidirección en las asociaciones (mantenimiento de referencias y nested tables en las diferentes clases relacionadas) Falta de IDEs que contemplen dichas extensiones. Triggers muy limitados por el problema de las tablas mutantes (para referenciar o desreferenciar el objeto se deben hacer consultas sobre la propia tabla a modificar o insertar). Como ventajas, el paso del diagrama de clases persistentes al modelo lógico es relativamente sencillo, se aumenta la semántica del problema a modelar. Java mediante librerías proporcionadas por Oracle permite el tratamiento de estas extensiones (CLOBs, BLOBs, Referencias, Varrays, etc) para su utilización en dicho lenguaje de programación orientado a objetos.

24 Referencias Oracle and Java Development – Bulusu Lakshman
Transparencias de las asignatura, tema 2. Manual del desarollador de jDeveloper. Tutoriales Java y Swing


Descargar ppt "Proyecto DE BASE DE DATOS"

Presentaciones similares


Anuncios Google