Anda di halaman 1dari 8

CASO: EL VIAJERO

Autor: Herver Cabezas ltima revisin: 08/03/2011 (creado en febrero del 2009) rea: Subgerencia de Informtica y Telecomunicaciones Objetivo: Revisin bsica de sentencias SQL Un analista plantea una solucin para la gestin automtica de transportes para el servicio de taxis del personal de una empresa X. Para esto se contratar a una o varias empresas cada una con un grupo de vehculos (taxis), los que contarn con un telfono (a cargo del chofer) quien registrar, cada viaje, va una aplicacin (en java) el momento en que parte (origen) la unidad (identificada por la placa) y el momento en que llega a su fin (destino) ascomo el pasajero que lleva. Ciertamente el universo de clientes son los trabajadores de la empresa y que se encuentran en una base de datos previamente definida, la cual tiene entre otros datos el cdigo, nombre y apellido de cada persona. Es posible que se presenten problemas de comunicacin (el aplicativo en java no puede conectarse a la red para el envo de datos), por lo que se debe contemplar el registro manual de datos para su posterior regularizacin en el sistema, y deber discriminar los viajes manuales de los automticos. Es importante registrar la fecha, hora y minuto (aaaa-mm-dd hh:mm) de cada viaje tanto para la ida como para el retorno. Para el caso planteado se requiere: 1. Enviar las estructuras que soportarn la solucin. 2. Los usuarios siempre consultarn los datos por rango de fecha y segn el cdigo del pasajero. La base de datos crecer aproximadamente en 10.000 registros de viajes por mes. 3. Las PC que hagan las consultas de datos tendr la opcin de verificar los datos confirmados en la base de datos como la opcin de ver los datos sin confirmacin (segn como se encuentren en proceso). Definir los detalles tcnicos en cada caso. 4. Enviar el script de insercin de datos para 3 viajes, 2 para la misma ficha F1 y 1 para la ficha F2 para hoy da. 5. Por error se debe cambiar la fecha de los 3 registros anteriores al ltimo da del mes inmediato anterior. Enviar script respectivo. 6. Se ha detectado que los datos de la ficha F2 nunca debieron ser registrados. Enviar script de actualizacin. 7. se requiere saber la cantidad de viajes que han hecho los pasajeros mes a mes, mostrando para ello el cdigo, nombre y apellido del pasajero, el ao, el mes y la cantidad de viajes realizados en dicho periodo. Enviar script respectivo. 8. Por reorganizacin de la base de datos el DBA sugiere cambiar los nombres a la tabla de viajes y desea agregar un ndice por pasajero y desea actualizar las estadsticas del motor de base de datos. Enviar script de atencin.

9. En cierto da no hubo servicio telefnico para lo cual se hizo un registro manual. Dichos datos se pretenden agregar a la BD va un archivo plano que tiene la misma estructura de la tabla fsica de movimientos, Enviar script que permite realizar la carga masiva (400 registros). Precisar el formato del archivo plano. 10. El usuario con que corre el aplicativo de mantenimiento se llama userAdmin y el que ejecuta las consultas se llama userConsulta. Generar los permisos de BD que correspondan.

SOLUCION 1 CREATE TABLE Empresa ( CodigoEmpresa INTEGER PRIMARY KEY, NombreEmpresa VARCHAR(15) NOT NULL, Ruc CHAR(10) NOT NULL) CREATE TABLE Vehiculo ( Placa INTEGER PRIMARY KEY, CodigoEmpresa INTEGER NOT NULL, Celular CHAR(11) NOT NULL, FOREIGN KEY(CodigoEmpresa) REFERENCES Empresa (CodigoEmpresa)) CREATE TABLE Cliente ( Ficha INTEGER PRIMARY KEY, Nombre VARCHAR(10) NOT NULL, Apellidos VARCHAR(20) NOT NULL) CREATE TABLE Registro ( Placa INTEGER, Ficha INTEGER, FechaInicio DATETIME YEAR TO MINUTE, FechaFin DATETIME YEAR TO MINUTE, TipoViaje VARCHAR(10)NOT NULL, FOREIGN KEY(Placa) REFERENCES Vehiculo(Placa), FOREIGN KEY(Ficha) REFERENCES Cliente(Ficha)) EXTENT SIZE 10000 ..........................................................................................

Insertaremos datos en las tablas: INSERT INTO Empresa (CodigoEmpresa, NombreEmpresa, Ruc) VALUES (1201, RAPITAXI, 100032323); INSERT INTO Empresa (CodigoEmpresa, NombreEmpresa, Ruc) VALUES (1202, SEGUROTAXI, 100043437); INSERT INTO Empresa (CodigoEmpresa, NombreEmpresa, Ruc) VALUES (1203, VIAJETAXI, 200098768); INSERT INTO Vehiculo (Placa, CodigoEmpresa, Celular) VALUES (1234, 1201, 999999); INSERT INTO Vehiculo (Placa, CodigoEmpresa, Celular) VALUES (2345, 1202, 888888); INSERT INTO Vehiculo (Placa, CodigoEmpresa, Celular) VALUES (4567, 1203, 777777); INSERT INTO Vehiculo (Placa, CodigoEmpresa, Celular) VALUES (5674, 1202, 333333); INSERT INTO Cliente (Ficha, Nombre, Apellidos) VALUES (20113210, X, Guzman); INSERT INTO Cliente (Ficha, Nombre, Apellidos) VALUES (20114512, Y, Ramirez); INSERT INTO Cliente (Ficha, Nombre, Apellidos) VALUES (20119765, Z, Lopez);

SOLUCION 2 El taxista enviar la informacin del viaje que consiste: el nombre del Cliente, fecha de Origen, fecha de Fin y si fue manual o automtico. Entonces el usuario que corre el aplicativo de mantenimiento UserAdmin ingresar los siguientes datos al sistema: Placa, Ficha, Fecha de Inicio, Fecha fin, Tipo de Viaje. INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (1234, 20113210, 2011-03-09 09:00, 2011-03-09 10:30, Automatico); INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (1234, 20114512, 2011-03-09 10:30, 2011-03-09 11:00, Automatico); INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (1234, 20113210, 2011-03-08 09:00, 2011-03-08 09:50, Manual); INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (2345, 20119765, 2011-03-08 10:00, 2011-03-08 10:45, Automatico); INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (1234, 20114512, 2011-03-08 11:00, 2011-03-08 13:00, Manual); INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (4567, 20113210, 2011-03-08 11:00, 2011-03-08 12:00, Automatico); INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (5674, 20119765, 2011-03-09 08:00, 2011-03-09 09:30, Manual); El cliente solicitara: SELECT Ficha, FechaInicio, Fechafin FROM Registro WHERE Ficha = 20113210 Ejecuta y le saldr todo el registro de sus viajes.

SOLUCION 3 Cuando ya estn confirmados BEGIN WORK; SET INSOLATION TO COMMITTED READ ON Registro COMMIT WORK; Cuando aun falta por confirmar BEGIN WORK; SET INSOLATION TO CURSOR STABILITY ON Registro COMMIT WORK;

SOLUCION 4 Para el Cliente X insertamos 2 viajes en la fecha de hoy: INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (1234, 20113210, 2011-03-09 09:00, 2011-03-09 10:30, Automatico); INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (1234, 20114512, 2011-03-09 10:30, 2011-03-09 11:00, Automatico); Para el Cliente Y insertamos 1 viaje en la fecha de hoy: INSERT INTO Registro (Placa, Ficha, FechaInicio, Fechafin, TipoViaje ) VALUES (2345, 20119765, 2011-03-09 12:00, 2011-03-09 12:45, Automatico);

SOLUCION 5 Debemos actualizar las tablas de las fechas insertadas a la fecha del ultimo da del mes anterior. UPDATE Registro SET FechaInicio = 2011-02-28 09:00, FechaFin = 2011-02-28 10:30 WHERE Ficha = 20113210 UPDATE Registro SET FechaInicio = 2011-02-28 10:30, FechaFin = 2011-02-28 11:00 WHERE Ficha = 20113210 UPDATE Registro SET FechaInicio = 2011-02-28 12:00, FechaFin = 2011-02-28 12:45 WHERE Ficha = 20113210 SOLUCION 6 Debemos eliminar todos los datos de la Ficha 2, en este caso de la ficha = 20113210. DELETE FROM Registro WHERE Ficha = 20113210 SOLUCION 7 Si un pasajero quiere saber la cantidad de viajes que a realizado durante el mes por intermedio de su ficha seria: Ejmp: el Cliente de Ficha igual a 20113210 SELECT Ficha, count(*) AS NumeroDeViajes FROM Registro WHERE Ficha = 20113210 GROUP BY 1 Para el caso general de ver los viajes realizados durante todo el mes seria: SELECT EXTEND (FechaInicio, MONTH TO MONTH), COUNT (*) As NumeroViajes FROM Registro GROUP BY 1

SOLUCION 8 En el caso de que ya se haya solucionado la primera parte de pasar los nombres de la tabla Cliente a la tabla Registro, se prosigue a crear un ndice para la columna nombre de Registro. CREATE INDEX Nombre_buscar ON Registro ( Nombre, X ASC) CREATE INDEX Nombre_buscar ON Registro ( Nombre, Y ASC) CREATE INDEX Nombre_buscar ON Registro ( Nombre, Z ASC)

SOLUCION 9 Uno de los 400 registro manuales, guardado en C:\temp\document Placa 4567 Ficha 20119765 FechaInicio 03-10-2001 10:00 FechaFin 03-10-2001 10:00 TipoViaje Manual

LOAD FROM C:\temp\document DELIMITER , INSERT INTO Registro(Placa, Ficha, FechaInicio, FechaFin, TipoViaje)

SOLUCION 10 Para el mantenimiento: USE /nombre de la Base datos/ GRANT INSERT ON Registro TO userAdmin .. Para la Consulta: USE /nombre de la Base datos/ GRANT SELECT ON Registro TO userConsulta USE /nombre de la Base datos/ REVOKE INSERT ON Registro TO userConsulta

Anda mungkin juga menyukai