proyecto de base de datos josé jesús marente florín daniel payán alcedo gestiÓn de reservas de...

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

Upload: goito-noe

Post on 03-Feb-2015

16 views

Category:

Documents


1 download

TRANSCRIPT

  • Diapositiva 1
  • PROYECTO DE BASE DE DATOS Jos Jess Marente Florn Daniel Payn Alcedo GESTIN DE RESERVAS DE HOTEL Tecnologa Avanzada de Bases de Datos Universidad de Cdiz
  • Diapositiva 2
  • PUNTOS A TRATAR Especificaciones funcionales Diagrama de clases persistentes (UML) Tipos y mtodos Disparadores y procedimientos Interfaces de usuario despliegue CONCLUSIONES
  • Diapositiva 3
  • ESPECIFICACIONES FUNCIONALES El sistema a modelar trata de la reserva de habitaciones de un hotel por parte de personas, las cuales sern empleados (personal del hotel) y clientes (no empleados que hayan realizado alguna vez alguna reserva). Estas personas podrn realizar reservas de habitaciones, cada una con diferentes ventajas econmicas: Empleados: se beneficiarn del 30% de descuento por cada reserva Clientes, deben tener almacenado un descuento, que lo asignar el sistema dependiendo del nmero de reservas que haya realizado, es decir, entre 2 y 3, un 5%, entre 4 y 8 el 10% ms de 8 reservas, el 20 %.
  • Diapositiva 4
  • ESPECIFICACIONES FUNCIONALES El hotel enva ofertas tanto a empleados como a clientes, dichas ofertas debern guardar las fechas de sta, su descripcin y el precio. El hotel dispone de habitaciones, las cuales se caracterizan por: el nmero (el cual ser nico en el hotel), la planta donde se encuentra (ser el primer dgito del nmero de habitacin, pues solo tenemos 5 plantas), la categora, que ser simple, doble o suit, la descripcin de ese tipo de habitacin y el precio de la misma al da.
  • Diapositiva 5
  • ESPECIFICACIONES FUNCIONALES Respecto a las reservas de habitaciones por las personas (mximo 5 por reserva), se guardarn las siguientes caractersticas, la fecha de inicio, la de fin, algn 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 mximo un da 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.
  • Diapositiva 6
  • DIAGRAMA DE CLASES PERSISTENTES Generalizacin / especializacin Atributo Compuesto Atributo Multievaluado Polimorfismo
  • Diapositiva 7
  • DIAGRAMA DE CLASES PERSISTENTES Asociacin N:N Asociacin 1:N getPrecio() = descuento de persona * das de reserva * precio habitaciones
  • Diapositiva 8
  • DIAGRAMA DE CLASES PERSISTENTES Agregacin Composicin 1:1
  • Diapositiva 9
  • TIPOS CREADOS Tipo Direccin Necesario para almacenar la direccin completa en Persona. Tipo Habitacin Tipo Cancelacin Tipo Persona Tipo Empleado Tipo Cliente Tipo Reserva
  • Diapositiva 10
  • MTODOS Obtener descuento en Cliente Devuelve el descuento que posee el cliente, segn el nmero 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, das de la duracin de la reserva y el descuento aplicado, segn que persona realiz la reserva. Obtener planta en habitacin Devuelve la planta en la que se encuentra la habitacin segn el nmero de esta.
  • Diapositiva 11
  • DISPARADORES Disparador cancelacin no permitida Una reserva se puede cancelar con un da de antelacin como mximo. Este disparador controlar que dicha cancelacin 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
  • Diapositiva 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
  • Diapositiva 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 relacin que exista entre la persona y la reserva
  • Diapositiva 14
  • PROCEDIMIENTO MODIFICAR RESERVA /* CREATE OR REPLACE PROCEDURE ModificaReserva ( idRes VARCHAR2, nuevafechaInicio VARCHAR2, nuevafechaFin VARCHAR2, nuevoscomentarios CLOB, DNIPer VARCHAR2, IdHabbitaciones Tipo_VectorCadenas ) IS RefPersona REF Tipo_Persona; RefReserva REF Tipo_Reserva; ListaRefHab Tipo_ListaHabitaciones; RefHab1 REF Tipo_Habitacion; realizada_por Tipo_Persona; realizadas Tipo_Realiza; realizadas_actualizadas Tipo_Realiza; reserva Tipo_Reserva; i NUMBER; indice NUMBER; cambiarPersona boolean; BEGIN /* DESVINCULAMOS A LA PERSONA */ SELECT DEREF(realizadaPor) INTO realizada_por FROM Tabla_Reserva WHERE IdReserva = to_number(idRes); cambiarPersona := false;
  • Diapositiva 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 tena 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; END IF;
  • Diapositiva 16
  • PROCEDIMIENTO MODIFICAR RESERVA /* MODIFICAMOS LA RESERVA */ -- Seleccionamos persona select REF(t) into RefPersona from Tabla_Persona t Where t.DNI = DNIPer; -- var que almacenar la lista de ref a habitaciones de esa reserva ListaRefHab := Tipo_ListaHabitaciones(); FOR i IN 1..IdHabbitaciones.count LOOP SELECT REF(H) INTO RefHab1 FROM Tabla_Habitacion H WHERE H.IDHabitacion = IdHabbitaciones(i); ListaRefHab.extend(); ListaRefHab(i) := RefHab1; END LOOP; -- actualizamos la reserva UPDATE Tabla_Reserva set FechaInicio = to_date(nuevafechaInicio,'DD/MM/YYYY'), FechaFin = to_date(nuevafechaFin,'DD/MM/YYYY'), -- Fecha Fin comentarios = nuevoscomentarios, -- Comentarios RealizadaPor = RefPersona, -- Referencia a Row de Tabla_Persona SeCancela = NULL, -- Cancelaciones TieneHabitaciones = ListaRefHab -- refs a habitaciones WHERE IdReserva = to_number(idRes);
  • Diapositiva 17
  • PROCEDIMIENTO MODIFICAR RESERVA /* VINCULAMOS A LA NUEVA PERSONA EN CASO DE QUE SEA OTRA */ IF cambiarpersona = true THEN SELECT REF(t) INTO RefReserva FROM Tabla_Reserva t WHERE t.IdReserva = idRes; SELECT realiza INTO realizadas FROM Tabla_Persona WHERE DNI = DNIPer; -- En su nested table de ref a reservas de esa nueva persona -- incluimos esta reserva i := realizadas.count; realizadas.EXTEND(); realizadas(i+1) := RefReserva; UPDATE Tabla_Persona SET realiza = realizadas WHERE DNI = DNIPer; END IF; EXCEPTION -- Algn tipo de error en la consulta de datos agregados WHEN OTHERS THEN --Lanzamos excepcin raise_application_error(-20010,'No se puede MODIFICAR reserva' ||SQLCODE||' -ERROR- '||SQLERRM); END ModificaReserva;
  • Diapositiva 18
  • INTERFACES DE USUARIO Como interface de usuario se ha optado por JDBC y Java para aplicaciones de escritorio (uso de librera Swing,) con los clsicos 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 (implementacin 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());
  • Diapositiva 19
  • INTERFACES DE USUARIO Implementamos BD.java, clase singleton que controla en todo momento la conexin con Oracle, desde el logon, pasando por las sucesivas operaciones DML y su posterior desconexin. El siguiente fragmento muestra el ncleo principal de conexin : Connection conn; try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); String url = "jdbc:oracle:thin:@//localhost:1521/XE"; 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.
  • Diapositiva 20
  • INTERFACES DE USUARIO Aunque se permita las operaciones INSERT, UPDATE o DELETE desde cdigo java, se establece hacer todo este tipo de operaciones DML a travs 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 .. . Dems campos } pstm1.execute();
  • Diapositiva 21
  • DESPLIEGUE 1. Crear usuario y dar permisos con grant 1. SQL> create user tabd 2. SQL> grant connect to tabd; 2. Ejecutar scripts de creacin de tipos, tablas, secuencias, disparadores y procedimientos 1. SQL> connect tabd 2. SQL> @DiseoLogicoEspecifico.sql 3. Lanzar la aplicacin : 1. Ejecutar el fichero GUIDBD.jar desde escritorio 2. Desde consola: java jar GUIDBD.jar
  • Diapositiva 22
  • DEMOSTRACIN
  • Diapositiva 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). Todava se aprecia ms dicha complejidad si se contempla la bidireccin 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 lgico es relativamente sencillo, se aumenta la semntica del problema a modelar. Java mediante libreras proporcionadas por Oracle permite el tratamiento de estas extensiones (CLOBs, BLOBs, Referencias, Varrays, etc) para su utilizacin en dicho lenguaje de programacin orientado a objetos.
  • Diapositiva 24
  • REFERENCIAS Oracle and Java Development Bulusu Lakshman Transparencias de las asignatura, tema 2. Manual del desarollador de jDeveloper. Tutoriales Java y Swing