Master Internacional en Software LibreBases de Datos PEC 4 Nombre alumno: Fecha máxima de entrega: 03/06/2015 Presentación y Objetivos La Prueba de Evaluación Continuada IV (PEC4) es la última de las cuatro PECs de las que consta la asignatura. Esta PEC tiene un peso del 35% en la nota final y los conceptos que se trabajan en ella son los correspondientes a los módulos "Bases de datos en MySQL", "Bases de datos en PostgreSQL", "Desarrollo de aplicaciones con conexión a Bases de Datos" y "Casos de estudio". La PEC consta de tres ejercicios prácticos. La valoración de cada ejercicio en el global de la PEC se incluye en la cabecera del enunciado. Puesto que la asignatura no tiene examen, es necesario realizar todas las PECs para poder superar la asignatura. Los ejercicios parten de la solución de las PECs anteriores, por lo que es importante tener las tablas creadas y los datos cargados según constan en las mismas. 1. Funciones PostgreSQL (45%) La operativa del sistema informático preparado para las empresas que desean operar en el mercado bursátil parece será todo un éxito, por lo que se desea codificar una de las funciones que se cree será critica para su funcionamiento: un disparador que permitirá realizar la compra de las acciones. En el momento en que se realice una inserción en la tabla 'BuySell' (se asumirá que siempre es una compra) se deberá ejecutar un disparador que ejecute una función que realice lo siguiente: - Sustituir el valor del campo dateHour por la hora actual del servidor (con now()). - Asignar una 'B' al campo buySell. - Comprobar en IntraDay que para el valor identificado por ticket, fecha y hora, existen suficientes acciones disponibles y que el precio al que se desea adquirir las acciones es igual o superior al que consta en IntraDay. En caso que no se cumpla alguna de las dos condiciones, se deberá sustituir el valor del campo de BuySell.quantityStock por un cero. En el caso que se cumplan las dos condiciones, se sustituirá el valor de compra deseado por el precio de IntraDay (podemos comprar acciones siempre que tengan un precio menor al máximo que deseamos pagar) y descontaremos de IntraDay.quantityStock el número de acciones que se compran. NOTA: es imprescindible para realizar el ejercicio tener las tablas creadas y los datos cargados exactamente según la propuesta de solución oficial de la PEC3. La existencia de la CONSTRAINT que impide insertar en BuySell órdenes de cero acciones es el mecanismo (sencillo y básico) elegido como control de errores. A efectos de facilitar el desarrollo del disparador / función, se considerará que la compra se efectúa al realizar las inserciones adjuntas, en la tabla BuySell (se deberán ejecutar también los SQL adjuntos para preparar las tablas con unos datos básicos): DELETE FROM BuySell; DELETE FROM Client CASCADE; DELETE FROM Employee CASCADE; DELETE FROM BrokerCompany CASCADE; 1 price) VALUES (3. y habiendo ejecutado los insert de éste apartado. phoneNumber. '911231234'. idClient. 1. UPDATE intraDay SET quantityStock = 500 WHERE ticket = 'ES0167050915' AND intraDayDay = '11/03/2009' AND intraDayHour = '09:15:00'. Nazaret'. idClient. '11/03/2009'. idEmployee. INSERT INTO Person VALUES (1. phoneNumber. 'Pirno Gamez. '911231234'. 1. 'ES0167050915'. idBroker. '01/01/1970'. '01/01/1964'. '09:15:00'. ¿qué pasará cuando se alcancen las cero acciones? ¿Qué pasará si el número de teléfono desde donde llama el comprador (que se intenta insertar) no es el que se tiene anotado en Person? Indicad los mensajes que retorna el SGBD e indicad si la inserción es correcta/incorrecta en los siguientes casos: INSERT INTO BuySell (id. '939879876'. 1. price) VALUES (2. phoneNumber. NULL). intraDayHour. 30.75). Al restar el número de acciones compradas del campo quantityStock de IntraDay. intraDayDay. ticket. idBrokerCompany. quantityStock. '06/04/2000'. '911231234'. INSERT INTO Client (id. 'Romero Parta. '09:15:00'. idEmployee. 'ES0167050915'. 'ES0167050915'. Mostrad el código de la función y del disparador. 'M'). 600. 100. '911231234'. INSERT INTO BuySell (id. quantityStock.50). 1. '01/01/2000'. 1. Chavier'. NULL. ticket. '09:15:00'. intraDayDay. teniendo el disparador y la función creados. después de haber realizado las inserciones del inicio del ejercicio. 29. idBrokerCompany. NULL). startDate) VALUES (1. intraDayHour. quantityStock. intraDayHour. '09/10/2001'). 2. INSERT INTO BrokerCompany VALUES (1. INSERT INTO Employee VALUES (2. 28. 'Gestora Ganancia'. 2. intraDayDay. Mostrad (captura de pantalla) el contenido final de la tabla BuySell y del registro IntraDay con ticket ES0167050915 y fecha/hora '11/03/2009'. 1. 2. NULL. idEmployee. idClient. '12345678T'. ticket. 2 .Master Internacional en Software Libre Bases de Datos DELETE FROM Person CASCADE. '3213213S'. 100. '11/03/2009'. INSERT INTO BuySell (id. 'M'). '11/03/2009'. price) VALUES (1. '09:15:00'. INSERT INTO Person VALUES (2. idBrokerCompany. 2.00). Identificador del cliente (campo id). el nombre corto del valor. En caso de ser válidos. . Pantalla resultados: Una vez se pulse sobre 'Aceptar' en la pantalla de compra. . mostrándose en cada línea: la fecha y hora de la compra.Cread la función incrementalmente. . el programa deberá: . el número de acciones.En caso de borrar la tabla BuySell se borrarán automáticamente los triggers asociados. . Es muy útil poner como primera línea de la función la asignación de la 'B' de 'Compra' en el campo correspondiente.Identificador el empleado (id del broker) con el que realizaremos la operación (se asumirá que éste operará siempre con el gestor con ID = 2). .Con 'ticket'.Master Internacional en Software Libre Bases de Datos NOTAS de desarrollo: . Pantalla compra acciones: Se deberán poder introducir los siguientes datos (en sus respectivos campos).Al modificar / borrar la función que se desarrolla. Se pide realizar en PHP una aplicación básica de tres pantallas. acciones*precio compra) Al final del listado deberá aparecer la suma del total de acciones. Pantalla autentificación: Todo cliente que desee utilizar el sistema deberá introducir su nick y su contraseña.Nombre corto de la acción que deseamos adquirir (por ejemplo SAB de Banco Sabadell). . 2. .Importe máximo que deseamos pagar por las acciones.Número acciones que se desean adquirir. y verificar a cada prueba que en los datos que se insertan en BuySell consta dicha 'B'. . junto con el precio total de adquisición. 3 . realizar la inserción en BuySell. Sistema de consultas Web (45%) Las expectativas del nuevo sistema informático para la intermediación de acciones son cada vez mayores. la fecha y hora. NOTA: Se añade para simplificar el código PHP (idealmente se debería arrastrar dicho valor desde la pantalla de autentificación). y el resto de datos introducidos. se podrá pasar a la pantalla de compra de acciones.Número de teléfono desde el que se realiza la operación. Recuperar la fecha y hora del último registro que consta en IntraDay para dicho valor. . por lo que se decide empezar formalmente su desarrollo. .Recuperar el identificador 'ticket' según el nombre corto introducido. probando cada update y condición individualmente. el precio de las acciones y el importe total (num. Una vez finalizado el proceso se deberá mostrar un listado con los datos de todas las operaciones de compra que ha realizado el cliente para dicho valor.Se considera (a efectos de simplificación) que toda inserción de registro en la tabla BuySell corresponde a una Compra (no teniéndose que tratar el posible caso de venta). asegurad cada vez que el trigger sigue 'disparándose'. Aunque no hace falta realizar el tratamiento del error (puede quedar el mensaje en pantalla). idClient. DELETE FROM Client CASCADE. phoneNumber. '09:15:00'. UPDATE IntraDay SET quantityStock = 500 WHERE ticket = 'ES0167050915' AND intraDayDay = '03/09/2008' AND intraDayHour = '15:20:00'. DELETE FROM Person CASCADE. 'ES0167050915'. Nota: al realizar el ALTER TABLE de la tabla CLIENTE. NULL). 4 . quantityStock. 2. 'abc'). intraDayHour. quantityStock. '977213708'. idClient. '911231234'. 31. '01/01/1964'. intraDayDay. 100. '01/01/1970'. idBrokerCompany. . que muestre el funcionamiento y el resultado de las operaciones y consultas.90).65). '911231234'. Employee. de cada 'pantalla'. INSERT INTO BuySell (id. UPDATE IntraDay SET quantityStock = 500 WHERE ticket = 'ES0167050915' AND intraDayDay = '11/03/2009' AND intraDayHour = '09:15:00'.En caso de indicarse un precio de compra inferior al que consta en IntraDay o no quedar acciones suficientes al intentar realizarse el insert. '01/01/2000'. quantityStock. borrad el contenido de las tablas Person. idBroker. idBroker. NULL. 1.Master Internacional en Software Libre Bases de Datos NOTA: . ALTER TABLE Client ADD password VARCHAR(20).El código PHP de la pantalla que pide el nombre de usuario y contraseña para la autentificación se puede reaprovechar de la PAC4 de semestres anteriores (no es necesario asegurar 'la seguridad' del sistema de autentificación). se producirá un error por una CONSTRAINT. '12345678T'. '11/03/2009'. 'Pirno Gamez. NULL. 2. '11/03/2009'. 100. idClient.Se deberá ampliar la tabla Client con los campos 'nick' y 'password'. 2. 34. NULL). ticket. idBrokerCompany. intraDayHour. Chavier'. '911231234'. idEmployee. '14:52:00'. '98798765Y'. intraDayHour. 'Jimeno Vilchez. INSERT INTO Employee VALUES (2. intraDayHour. '01/01/1980'. '09/10/2001'. 1. idClient. idEmployee. 'M'). price) VALUES (4. '15:20:00'. 'ES0167050915'. 2. startDate. 1. UPDATE IntraDay SET quantityStock = 500 WHERE ticket = 'ES0167050915' AND intraDayDay = '16/06/2008' AND intraDayHour = '14:52:00'. idEmployee. DELETE FROM BrokerCompany CASCADE. INSERT INTO Person VALUES (2. NULL. 'Ilusiones'. idBrokerCompany. 2. idBrokerCompany. password) VALUES (1. ya no podemos asegurar el orden de los campos. '939879876'. Client y BuySell e insertad los siguientes registros (dichos datos son les que deben aparecer en las capturas de pantalla que demuestren el funcionamiento de la aplicación): DELETE FROM BuySell. '06/04/2000'. 'Romero Parta. intraDayDay. phoneNumber. INSERT INTO Person VALUES (1. 1. price) VALUES (7. ALTER TABLE Client ADD nick VARCHAR(20). '123'). INSERT INTO Client (id. ticket. quantityStock. '911231234'. . price) VALUES (5. phoneNumber. 29. price) VALUES (6. INSERT INTO Client (id. NULL). 'ES0167050915'. 2. se deberá mostrar listado de las acciones que consta que tiene el cliente para el valor concreto.78). '3213213S'. Iban'. Para probar la aplicación.10). 'pgamez'. 3. intraDayDay. phoneNumber. 'Gestora Ganancia'. '12/11/2003'. nick. 'ES0167050915'. Se pide mostrar los programas PHP y una captura de pantalla. 'M'). INSERT INTO BuySell (id. BrokerCompany. ticket. '977213708'. 1. DELETE FROM Employee CASCADE. '03/09/2008'. 'jivi'. INSERT INTO Person VALUES (3. password) VALUES (3. 'M'). INSERT INTO BuySell (id. 200. ticket. 100. INSERT INTO BuySell (id. '31/12/2004'. idEmployee. nick. '16/06/2008'. 29. intraDayDay. 1. a efecto de poder realizar la verificación inicial. startDate. '09:15:00'. Nazaret'. 2. INSERT INTO BrokerCompany VALUES (2. INSERT INTO BrokerCompany VALUES (1. se cree conveniente probar una consulta sobre el SGBD MySQL/MariaDB. En cada línea se deberá mostrar el nombre corto del valor. Realizad un programa en Java (según ejemplo adjunto al enunciado de la PEC). 3. el total de acciones. retorne el listado de acciones que tiene el cliente con id 3 (para simplificar el ejercicio constará que dicho valor siempre será fijo en la consulta). 2. que accediendo a la base de datos MySQL/MariaDB por JDBC. Se desea: 1. el programa java desarrollado y una captura de pantalla que muestre su funcionamiento. 5 . Se pide mostrar los SQL utilizados para la carga de los datos. Cargad los datos de las tablas recién creadas.Master Internacional en Software Libre Bases de Datos Programas PHP: Capturas de pantalla de la aplicación: 3. equivalentes a las existentes el en PostgreSQL. Cread en el MySQL/MariaDB las tablas ShareStock y BuySell. de los ficheros . Consulta datos cliente/servidor (10%) Para incrementar la interoperatibilidad del sistema de compra/venta bursátil. el precio de compra y el importe de la operación. la fecha (tercera columna).txt del mismo nombre adjuntos al enunciado de la PEC. Este último deberá contener todo el código PHP y JAVA. DOC. Java. La PEC se entregará a través del apartado correspondiente del aula. Se deberán entregar tres ficheros: un fichero ofimático editable (ODT. una versión del mismo en formato PDF (a efectos de evitar problemas de inserción de imágenes y otros derivados de la ofimática) y un tercer fichero de tipo zip o rar. No comprimáis el fichero (ni ZIP. los SQLs. RTF). ni entreguéis ficheros adicionales a los documentos indicados. 6 . etc). son las 23h 59min del día 3 de junio de 2015. El nombre de los documentos a entregar debe seguir el patrón: BD_PEC4_Apellido1Nombre. y PHP en el documento editable.Master Internacional en Software Libre Bases de Datos Formato de entrega Se valorará que las sentencias de creación de tablas. La fecha máxima de entrega. improrrogable. Incluid además todo el código SQL. ni RAR.extensión y debe constar vuestro nombre y apellidos al principio de la PEC. el código java y PHP sean muy legibles y estén adecuadamente indentados (tabulados).