Proyecto DE BASE DE DATOS

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

Las aplicaciones requieren datos persistentes
Acceso a Bases de Datos con Java
SQL Sigla del nombre “Structured Query Language”.
integridad referencial
LENGUAJE ESTRUCTURADO DE CONSULTA “SQL”
BASE DE DATOS OBJETO RELACIONAL
Introducción a Transact-SQL
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Acceso a bases de datos MySQL en PHP
Presentación Asignatura POF030 Semana 1. Contenido En forma general, los conceptos que se estudiarán en la asignatura son: – Procedures – Functions –
Maestría en Bioinformática Bases de Datos y Sistemas de Información Otros objetos de Base de Datos Ing. Alfonso Vicente, PMP
PL/SQL Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Francisco Moreno Bases de Datos II Universidad Nacional
Características Objeto Relacionales en Oracle
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
Características Objeto Relacionales en Oracle
Tema 3 J2EE Java Database Connectivity Temas Selectos de Cómputo Grupo 912.
PL/SQL Francisco Moreno Universidad Nacional.
SQL SERVER APLICADO (SSA010) Ariel Alexis Fierro Sáez DuocUC.
Características Objeto Relacionales en Oracle Francisco Moreno Universidad Nacional.
Tema 6: Clases Antonio J. Sierra.
PL/SQL Francisco Moreno Universidad Nacional. Introducción al PL/SQL ¿Por qué PL/SQL? A pesar de que SQL tiene mecanismos de control condicional (cláusula.
Bases de Datos Relacionales
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
ARCHIVOS Y CONEXIÓN A BASE DE DATOS. FileInputStream: Clase que representa ficheros de texto accedidos en orden secuencial, byte a byte. FileWriter: Clase.
PL/SQL Francisco Moreno Universidad Nacional.
Subconsultas Avanzadas
Ing. Ricardo Carlos Inquilla Quispe
Procedimientos Almacenados Funciones Agregadas
Bases de datos en la Web n Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la información de un sitio web n Ventajas –Proporcionar.
Componentes sintácticos
UNITA - IBARRA TRIGGERS
John Freddy Duitama M.U.de.A. Facultad de Ingeniería. Creación del esquema de Una Base de Datos. John Freddy Duitama Muñoz. Facultad de Ingeniería. U.de.A.
Laboratorio de Bases de datos
CONCEPTOS BASICOS SQL SERVER SEBASTIAN MARTINEZ GARCIA.
Práctica: Sistema de control de ventas y almacenaje para grandes almacenes 03/12/11.
PL/SQL Francisco Moreno Universidad Nacional.
TRIGGERS EN ORACLE 8 J. Iriarte S. España
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
Fernando Alonso Nicolás Serrano Acceso a Bases de Datos con Java JDBC 01 de Abril de 2008.
Ing. Elkin José Carrillo Arias
Triggers(Disparadores)
Tema 2: Base de datos relacionales
Introducción a Bases de Datos en Microsoft Access Programación de Computadoras 2 Sección: P.
LENGUAJE SQL.
Introducción al Lenguaje. ¿ Qué es PHP ? O Hypertext Pre-processoes (PHP) es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en.
TEMA 9: DIAGRAMA DE CLASE EN UML
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Lenguaje Estructurado de Consulta
SQL Sigla del nombre “Structured Query Language”.
INSTRUCCIONES Elaboración de la Presentación:
SQL Lenguaje Estructurado de Consulta MATERIA: diseñar sistemas de información ALUMNO: sarmiento flores Liliana Guadalupe GRUPO: 4° “A” TURNO: matutino.
SQL (Structured Query Language) Lenguaje orientado a bases de datos y sobre todo, al manejo de consultas; el objetivo principal de SQL es la realización.
PUESTO-TRABAJO (Código-Puesto, Empresa, Sueldo, DNI- Contratado) TITULADO (DNI-Titulado, Nombre, Apellidos, Dirección) TITULACION (Iden-Titulación, Nombre,
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo SQL en PL/SQL Conceptos básicos.
MULTIPLAN Multiplan es la práctica en grupo que hemos tenido que realizar durante el curso según las especificaciones dadas en la asignatura.
Bases de Datos SQL.
ORACLE SQL - DCL.
6 Triggers ORACLE - II Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
DLM Transact SQL Sesión I Introducción al SQL Server Uso de las herramientas de consultas del Transact SQL.
3 Cursores ORACLE Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca In. Wilson Ortega.
Structure Query Languaje SQL. Introducción a SQL El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado, utilizado por.
DML Transact SQL Sesión X Triggers. Duración 2 Horas.
Crear Aplicación Cliente para Conectarse a una Base de Datos.
6 Triggers ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
6 Copyright © 2004, Oracle. Todos los derechos reservados. Trabajar con Tipos de Dato Compuestos.
6 Triggers ORACLE - III Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Transcripción de la presentación:

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

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

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 %.

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.

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.

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

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

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

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

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.

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

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

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

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;

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;

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

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;

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());

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 = "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.

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();

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 SQL> @DiseñoLogicoEspecifico.sql Lanzar la aplicación : Ejecutar el fichero GUIDBD.jar desde escritorio Desde consola: java –jar GUIDBD.jar

DEMOstración

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.

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