Proyecto de Base de Datos (Parte II)
Upcoming SlideShare
Loading in...5
×
 

Proyecto de Base de Datos (Parte II)

on

  • 1,571 views

Parte II del Proyecto de Base de datos para la asignatura de Bases de Datos de la Universidad Miguel Hernández de Elche

Parte II del Proyecto de Base de datos para la asignatura de Bases de Datos de la Universidad Miguel Hernández de Elche

Statistics

Views

Total Views
1,571
Views on SlideShare
1,571
Embed Views
0

Actions

Likes
0
Downloads
65
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Proyecto de Base de Datos (Parte II) Proyecto de Base de Datos (Parte II) Document Transcript

  • Proyecto deBase de Datos PARTE II Anna Vega Carrillo 74243557-V 4ºIng.Telecomunicación Diseño de Base de Datos
  • Diseño de Base de Datos Proyecto Final Í N D I C EPARTE III.IV.-Creación de los Datos....................................................................................................Página 1 Paso1.- Creación de las Tablas.....................................................................................Página 1 Paso2.- Inserción de las restricciones...........................................................................Página 2 Paso 3.- Introducción de los Datos...............................................................................Página 4I.V.-Operaciones sobre los datos.........................................................................................Página 10
  • Diseño de Base de Datos Proyecto Final PROYECTO FINAL DE DISEÑO DE BASE DE DATOSPARTE II En esta segunda parte de nuestro proyecto final de base de datos, nos introduciremos enOracle9i, es decir, todo nuestro diseño lo adaptaremos de modo que podamos crear nuestra base dedatos en Oracle9i. Para ello, lo primero que haremos será modificar un par de aspectos que ennuestro diseño original no se pueden implementar en Oracle9i, o si se pueden, nosotros no sabemoshacerlo.I.IV.-Creación de los Datos A continuación modificaremos los scripts realizados en la parte primera del proyecto, con elfin de adaptarlo a Oracle.Paso1.- Creación de las Tablas.La siguiente tabla contiene la información sobre las dependencias de la nave espacial. Todadependencia debe estar bajo el control de un servicio, en el caso de no asignarle ningún servicio, pordefecto una dependencia estaría bajo el control del servicio de Seguridad, cuya clave es 0101.CREATE TABLE DEPENDENCIAS( Codigo_dep NUMBER(4,0) NOT NULL, Nombre_dep VARCHAR(15) NOT NULL, Funcion VARCHAR(15), Localizacion VARCHAR(15), Nombre_servicio VARCHAR(15) DEFAULT Seguridad NOT NULL, Clave NUMBER(4,0) DEFAULT 0101 NOT NULL);La siguiente tabla contiene la información sobre las cámaras. Una cámara es una dependencia, demodo que el codigo_cam coincidirá con el codigo_dep de alguna dependencia. Además, cámaratiene dos campos más que son categoría y capacidad, donde almacenaremos la categoría de lacámara y la capacidad que tiene, respectivamente.CREATE TABLE CAMARA( Codigo_cam NUMBER(4,0) NOT NULL, Categoría_cam VARCHAR(15) NOT NULL, Capacidad NUMBER(2,0) NOT NULL);La siguiente tabla contiene el nombre y clave que identifica a cada uno de los servicios.CREATE TABLE SERVICIO( Nombre_servicio VARCHAR(15) NOT NULL, Clave NUMBER(4,0) NOT NULL);La siguiente tabla contiene la información sobre cada uno de los tripulantes, su código, su categoría,su nombre, etc. 1
  • Diseño de Base de Datos Proyecto FinalCREATE TABLE TRIPULACION( Codigo_trip NUMBER(4,0) NOT NULL, Categoría_trip VARCHAR(15) NOT NULL, Nombre_trip VARCHAR(20) NOT NULL, Antigüedad DATE NOT NULL, Situación_administrativa VARCHAR(15) NOT NULL, Procedencia VARCHAR(15), Codigo_dependencia_trabajar NUMBER(4,0) DEFAULT 0160 NOT NULL, Codigo_dependencia_alojar NUMBER(4,0) DEFAULT 0130 NOT NULL);La siguiente tabla nos determina la relación estar_asignado entre dependencias y servicios, ya quetodo servicio debe estar asignado como mínimo a una dependencia. En el caso de que a un serviciono le hubiésemos asignado ninguna dependencia, dicho servicio estaría asignado por defecto a ladependencia 0160.CREATE TABLE ESTAR_ASIGNADO( Codigo_dep NUMBER(4,0) DEFAULT 0160 NOT NULL, Nombre_servicio VARCHAR(15) NOT NULL, Clave NUMBER(4,0) NOT NULL);La siguiente tabla contiene la información de los planetas.CREATE TABLE PLANETA( Codigo_planeta VARCHAR(6) NOT NULL, Nombre_planeta VARCHAR(15) NOT NULL, Galaxia VARCHAR(15) NOT NULL, Coordenadas VARCHAR(15) NOT NULL);La siguiente tabla contiene la información de las razas que pueblan los planetas, ya que no puedeexistir ninguna raza que no viva en ningún planeta.CREATE TABLE RAZA( Nombre_raza VARCHAR(15) NOT NULL, Peso NUMBER(5,2), Altura NUMBER(5,2), Anchura NUMBER(5,2));La siguiente tabla contiene la información correspondiente a las visitas realizadas por cadatripulante, un tripulante puede no haber realizado ninguna visita.CREATE TABLE VISITADO( Codigo_trip NUMBER(4,0) NOT NULL, Codigo_planeta VARCHAR(6) NOT NULL, Numero_de_visita NUMBER(2,0) NOT NULL, Tiempo_de_visita NUMBER(3,1) NOT NULL);La siguiente tabla corresponde con la relación estar_poblado entre planeta y raza. El campocantidad_de_individuos nos informa sobre la cantidad de individuos de esa raza en ese planeta.CREATE TABLE ESTAR_POBLADO( Codigo_planeta VARCHAR(6) NOT NULL, Nombre_raza VARCHAR(15) NOT NULL, Cantidad_de_individuos NUMBER(20,0) NOT NULL); 2
  • Diseño de Base de Datos Proyecto FinalPaso2.- Introducción de las restricciones. Una vez creadas las tablas, modificamos el script de restricciones. En Oracle9i sólo sepermite el borrado en cascada, y el resto de opciones de borrado y modificación que hicimos en laparte primera del proyecto no las acepta. De modo que no nos dejará borrar ni modificar nada, sihace referencia algún dato de la base de datos a un determinado registro, ya que por defectoOracle9i realiza borrado y actualización restringida. Lo que supone que cada vez que queramosactualizar o borrar algún dato al que le hagan referencia otros registros, tendremos que modificarprimero el registro al cual nadie referencia, y después modificar el registro principal al que hacianreferencia los otros registros, pues al cambiarlo inicialmente en los otros registros ahora ya no hayninguno que le referencie, en ese momento Oracle9i ya nos permitirá el borrado o la actualización.Una cosa parecida a lo explicado será lo que realicemos en la última consulta.Introducción de las restricciones de claves primarias de las tablas creadas:ALTER TABLE DEPENDENCIAS ADD CONSTRAINT CLAPPAL_DEP PRIMARY KEY (Codigo_dep);ALTER TABLE CAMARA ADD CONSTRAINT CLAPPAL_CAM PRIMARY KEY(Codigo_cam);ALTER TABLE TRIPULACION ADD CONSTRAINT CLAPPAL_TRIP PRIMARY KEY(Codigo_trip);ALTER TABLE SERVICIO ADD CONSTRAINT CLAPPAL_SERVICIO PRIMARY KEY (Nombre_servicio, Clave);ALTER TABLE ESTAR_ASIGNADO ADD CONSTRAINT CLAPPAL_ASIGNAR PRIMARY KEY (Codigo_dep, Nombre_servicio, Clave);ALTER TABLE PLANETA ADD CONSTRAINT CLAPPAL_PLANETA PRIMARY KEY (Codigo_planeta);ALTER TABLE ESTAR_POBLADO ADD CONSTRAINT CLAPPAL_POBLADO PRIMARY KEY(Codigo_planeta, Nombre_raza);ALTER TABLE RAZA ADD CONSTRAINT CLAPPAL_RAZA PRIMARY KEY (Nombre_raza);ALTER TABLE VISITADO ADD CONSTRAINT CLAPPAL_VISITADO PRIMARY KEY(Codigo_trip, Codigo_planeta, Numero_de_visita);Introducción de las restricciones de claves foráneas de las tablas creadas:ALTER TABLE DEPENDENCIAS ADD CONSTRAINT CLAFOR_DEP FOREIGN KEY (Nombre_servicio,Clave) REFERENCES Servicio(Nombre_servicio, Clave);ALTER TABLE CAMARA ADD CONSTRAINT CLAFOR_CAM 3
  • Diseño de Base de Datos Proyecto Final FOREIGN KEY(Codigo_cam) REFERENCES Dependencias(Codigo_dep) ON DELETE CASCADE;ALTER TABLE TRIPULACION ADD CONSTRAINT CLAFOR_TRABAJAR FOREIGN KEY (Codigo_dependencia_trabajar) REFERENCES Dependencias(Codigo_dep);ALTER TABLE TRIPULACION ADD CONSTRAINT CLAFOR_ALOJAR FOREIGN KEY (Codigo_dependencia_alojar) REFERENCES Dependencias (Codigo_dep);ALTER TABLE ESTAR_ASIGNADO ADD CONSTRAINT CLAFOR_DEP FOREIGN KEY (Codigo_dep) REFERENCES Dependencias(Codigo_dep);ALTER TABLE ESTAR_ASIGNADO ADD CONSTRAINT CLAFOR_SERVICIOCLAVE FOREIGN KEY (Nombre_servicio,Clave) REFERENCES Servicio(Nombre_servicio,Clave) ON DELETE CASCADE;ALTER TABLE VISITADO ADD CONSTRAINT CLAFOR_CODTRIP FOREIGN KEY(Codigo_trip) REFERENCES Tripulacion(Codigo_trip) ON DELETE CASCADE;ALTER TABLE VISITADO ADD CONSTRAINT CLAFOR_CODPLANETA FOREIGN KEY(Codigo_planeta) REFERENCES Planeta(Codigo_planeta);ALTER TABLE ESTAR_POBLADO ADD CONSTRAINT CLAFOR_POBLADOPLANETA FOREIGN KEY (Codigo_planeta) REFERENCES Planeta(Codigo_planeta);ALTER TABLE ESTAR_POBLADO ADD CONSTRAINT CLAFOR_POBLADORAZA FOREIGN KEY (Nombre_raza) REFERENCES Raza (Nombre_raza) ON DELETE CASCADE;Paso3.- Introducción de los Datos. Una vez creada toda la estructura de nuestra base de datos, nos disponemos a introducir losdatos en ella, es decir, vamos a poblar nuestra base de datos. La sintaxis SQL a utilizar es lasiguiente: INSERT INTO [Nombre de la tabla] [Nombre de los campos,...,]VALUES[Expr,...,] Datos de la tabla Servicio: INSERT INTO SERVICIO (Nombre_servicio,Clave) VALUES (Seguridad,0101); INSERT INTO SERVICIO (Nombre_servicio,Clave) VALUES (Alimentacion, 0202); INSERT INTO SERVICIO (Nombre_servicio,Clave) VALUES (Investigacion, 0303); INSERT INTO SERVICIO (Nombre_servicio,Clave) VALUES (Comunicacion, 0404); INSERT INTO SERVICIO (Nombre_servicio,Clave) VALUES (Mantenimiento, 0505); INSERT INTO SERVICIO (Nombre_servicio,Clave) VALUES (Control, 0606); INSERT INTO SERVICIO (Nombre_servicio,Clave) VALUES (Operaciones, 0707); Datos de la tabla Tripulacion: INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (1, 4
  • Diseño de Base de Datos Proyecto FinalGeneral, Pedro Picapiedra, 23-2-1992, Servicio, Tierra, 0160, 0120); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (10,General, Draco, 6-9-1994, Servicio, Tierra, 0190, 0120); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (11,General, Lyra, 4-7-1995, Servicio, Tierra, 0180, 0120); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (2,Militar, Antlia, 12-3-1995, Servicio, Tierra,0150, 0170); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (3,Militar, Hydra, 14-4-1996, Baja, Tierra,0150, 0170); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (4,Militar, Crater, 14-8-1994, Baja, Tierra, 0150, 0170); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (5,Militar, Cassiopeia, 2-6-1993, Servicio, Tierra,0160, 0170); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (6,Comercial,Lacerta, 4-5-1994, Servicio, Tierra,0110 ,0130 ); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (7,Comercial,Orion, 13-7-1997, Baja, Tierra,0140, 0130); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (8,Comercial,Perseus, 17-4-1996, Servicio, Tierra,0140, 0130 ); INSERT INTO TRIPULACION (Codigo_trip, Categoría_trip, Nombre_trip, Antigüedad,Situación_administrativa,Procedencia, Codigo_dependencia_trabajar, Codigo_dependencia_alojar) VALUES (9,Comercial, Bootes, 3-8-1993, Servicio, Tierra, 0110, 0130 ); Datos de la tabla Dependencia: INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES (0110, Camelopardis, Laboratorio, Norte, Investigacion, 0303); INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES (0120, Triangulum, Descanso, Este, Mantenimiento, 0505); INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES (0130, Moroceros, Descanso, Oeste, Mantenimiento, 0505 ); INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES(0140, Pyxis, Nutricion, Sur, Alimentacion, 0202 ); INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES(0150, Eridanus, Comando, Norte, Operaciones, 0707); 5
  • Diseño de Base de Datos Proyecto Final INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES(0160, Taurus, Control, Este, Mantenimiento, 0505); INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES(0170, Leo, Descanso, Sur, Mantenimiento, 0505 ); INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES(0180, Andromedis, Estrategia, Sur, Control, 0606 ); INSERT INTO DEPENDENCIAS (Codigo_dep, Nombre_dep, Funcion, Localizacion, Nombre_servicio,Clave) VALUES (0190, Apus, Estrategia, Sur, Operaciones, 0707 ); Datos de la tabla Camara: INSERT INTO CAMARA (Codigo_cam,Categoría_cam, Capacidad) VALUES (0120, General, 3); INSERT INTO CAMARA (Codigo_cam, Categoría_cam, Capacidad) VALUES (0130,Comercial, 20); INSERT INTO CAMARA (Codigo_cam, Categoría_cam, Capacidad) VALUES (0170,Militar, 15); Datos de la tabla Estar_Asignado: INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES(0170, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES(0130, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES(0120, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES(0110, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES(0140, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES(0150, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0160, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0180, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0190, Seguridad,0101); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0140,Alimentacion, 0202); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0110,Investigacion, 0303); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0150,Comunicacion, 0404); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0110,Mantenimiento, 0505); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0120,Mantenimiento, 0505); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0130,Mantenimiento, 0505); 6
  • Diseño de Base de Datos Proyecto Final INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0140,Mantenimiento, 0505); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0150,Mantenimiento, 0505); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0160,Mantenimiento, 0505); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0170,Mantenimiento, 0505); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0180,Mantenimiento, 0505); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0190,Mantenimiento, 0505); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0180, Control,0606); INSERT INTO ESTAR_ASIGNADO (Codigo_dep, Nombre_servicio, Clave) VALUES (0190, Operaciones,0707); Datos de la tabla Planeta: INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES(MER,Mercurio, Via_Lactea, 32.76); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES(VEN,Venus,Via_Lactea, 456.98); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES(TIE,Tierra,Via_Lactea, 236.86); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (MAR,Marte,Via_Lactea, 275.57); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (JUP,Jupiter,Via_Lactea, 12.63); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (SAT,Saturno,Via_Lactea, 126.729); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES(URA,Urano, Via_Lactea, 91.250); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (NEP,Neptuno, Via_Lactea, 420.57); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (PLU,Pluton, Via_Lactea, 34.86); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (LUN01,Luna, Via_Lactea, 25.76); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES(TIT01,Titan, Via_Lactea, 47.568); 7
  • Diseño de Base de Datos Proyecto Final INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (EUR01,Europa, Via_Lactea, 490.74); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (GAN01,Ganimedes, Via_Lactea, 234.85); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES (CAL01,Calisto, Via_Lactea, 13.58); INSERT INTO PLANETA (Codigo_planeta,Nombre_planeta,Galaxia,Coordenadas) VALUES(MIM01,Mimas, Via_Lactea, 87.24); Datos de la tabla Raza: INSERT INTO RAZA (Nombre_raza, Peso, Altura, Anchura) VALUES (Terricolas,60,1.70,100); INSERT INTO RAZA (Nombre_raza, Peso, Altura, Anchura) VALUES (Vulcanos,68,1.80,100); INSERT INTO RAZA (Nombre_raza, Peso, Altura, Anchura) VALUES (Serpens,75,1.65,95); INSERT INTO RAZA (Nombre_raza, Peso, Altura, Anchura) VALUES (Canis,50,1.60,90); INSERT INTO RAZA (Nombre_raza, Peso, Altura, Anchura) VALUES (Borealis,80,1.85,125); Datos de la tabla Estar_Poblado: INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(TIE,Terricolas, 300); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(VEN, Vulcanos, 200); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(MAR, Terricolas, 50); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(MER, Serpens, 60); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(NEP, Canis, 80); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(URA, Vulcanos, 100); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(PLU, Serpens, 50); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(JUP, Canis, 500); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(SAT, Borealis, 200); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(MER, Borealis, 50); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(SAT, Serpens, 50); INSERT INTO ESTAR_POBLADO (Codigo_planeta, Nombre_raza, Cantidad_de_individuos) VALUES(SAT, Canis, 10); 8
  • Diseño de Base de Datos Proyecto Final Datos de la tabla Visitado: INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(1,TIE,1,56); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(1,TIE,2,72); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(1,PLU,1,24); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,MER,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,VEN,1,45); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,TIE,1,23); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,MAR,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,JUP,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,SAT,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,URA,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,NEP,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,PLU,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,LUN01,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,TIT01,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,EUR01,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,GAN01,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,CAL01,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(2,MIM01,1,42); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES 9
  • Diseño de Base de Datos Proyecto Final(3,VEN,1,56); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(4,URA,1,72); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(5,NEP,1,24); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(6,MAR,1,8); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(7,MER,1,36); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(8,JUP,1,24); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(8,EUR01,1,36); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES(9,TIE,1,36); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES (2,MIM01, 1, 40); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES (3,CAL01, 1, 24); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES (4,GAN01, 1, 36); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES (5,EUR01, 1, 50); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES (6,TIT01, 1, 60); INSERT INTO VISITADO (Codigo_trip,Codigo_planeta,Numero_de_visita,Tiempo_de_visita) VALUES (7,LUN01, 1, 50);I.V.-Operaciones sobre los Datos Una vez introducidos los datos, llevaremos a cabo la realización de una serie de consultasy/o operaciones sobre nuestra base de datos. a) En la primera de ellas, deseamos saber los planetas visitados por el tripulante “PedroPicapiedra”, dando una lista con el nombre de dichos planetas, mostrando la raza que lo habita y lacantidad de individuos de esa raza en dicho planeta. SELECT DISTINCT NOMBRE_PLANETA, NOMBRE_RAZA, CANTIDAD_DE_INDIVIDUOS FROM PLANETA LEFT JOIN ESTAR_POBLADO ON PLANETA.CODIGO_PLANETA=ESTAR_POBLADO.CODIGO_PLANETA WHERE PLANETA.CODIGO_PLANETA IN (SELECT VISITADO.CODIGO_PLANETA FROM VISITADO, TRIPULACION WHERE VISITADO.CODIGO_TRIP=TRIPULACION.CODIGO_TRIP AND NOMBRE_TRIP=Pedro Picapiedra); 10
  • Diseño de Base de Datos Proyecto Final En la subconsulta accedemos a las tablas visitado y tripulación, uniendo ambas tablas por elcódigo del tripulante, seleccionando el código de los planetas visitados por aquel tripulante cuyonombre sea Pedro Picapiedra. Una vez realizada esta selección de planetas, seleccionamos sin duplicados, por ello elDISTINCT, ya que pueden haber realizado más de una visita al mismo planeta, y como lainformación que se desea va a ser la misma en ambas visitas, no me interesa que salgan todas lasveces que se haya visitado dicho planeta. Unimos las tablas planeta y estar_poblado por el código del planeta, obteniendo los planetasque están poblados, pero como puede ocurrir que un planeta no esté poblado, por ello ponemos elLEFT JOIN, para que aparezcan todos los planetas, estén o no poblados. Y por terminar elegimos todos los planetas cuyo código coincida con el código de alguno delos planetas obtenidos en la subconsulta, y de estos mostramos su código, la cantidad de individuosy el nombre de la raza que allí habita. El resultado de la consulta es: NOMBRE_PLANETA NOMBRE_RAZA CANTIDAD_DE_INDIVIDUOS --------------- --------------- ---------------------- Pluton Serpens 50 Tierra Terricolas 300 b) En esta consulta, nos piden que demos una lista de aquellas cámaras que han llegado a sucapacidad máxima. Esta consulta se divide en dos. En la subconsulta, unimos las tablas tripulación y cámara, porel código de dependencia alojar con el código de cámara, de modo que obtenemos una lista con elcódigo de cámara donde se aloja algún tripulante, y lo agrupo en función de la capacidad de lacámara y del código de la cámara. Además sumamos todos los tripulantes que hay en cada grupoobtenido anteriormente, si dicha cantidad coincide con la capacidad de dicha cámara, quedaráseleccionado dicho código de cámara. En la otra consulta unimos las tablas dependencia y cámara por el código de dependencia yde cámara, obteniendo de este modo sólo las dependencias que son cámara. Si el código de lascámaras obtenidas se corresponde con alguno de los códigos obtenidos en la subconsulta, meaperecerá como solución el código, nombre, la categoría y la capacidad de dichas cámaras. Estaúltima consulta tal vez no fuera necesaria hacerla, pues con la subconsulta ya tenemos las cámarasque están al aforo completo, pero como cámara la conocemos a partir de dependencias, puesto queuna cámara es una dependencia, lo hemos hecho de este modo pensando que era más correcta suimplementación. SELECT CODIGO_DEP, NOMBRE_DEP, CATEGORÍA_CAM, CAPACIDAD FROM DEPENDENCIAS JOIN CAMARA ON CODIGO_DEP=CODIGO_CAM WHERE CODIGO_DEP IN (SELECT CODIGO_DEPENDENCIA_ALOJAR FROM TRIPULACION JOIN CAMARA ON CODIGO_DEPENDENCIA_ALOJAR=CODIGO_CAM GROUP BY CODIGO_DEPENDENCIA_ALOJAR, CAPACIDAD HAVING COUNT(*)=CAPACIDAD); 11
  • Diseño de Base de Datos Proyecto Final El resultado de la consulta es: CODIGO_DEP NOMBRE_DEP CATEGORÍA_CAM CAPACIDAD ---------- --------------- --------------- ---------- 120 Triangulum General 3 c) Nos piden el nombre de aquellos tripulantes que trabajen en una dependencia, cuyoservicio que la controla se llama seguridad. En esta consulta unimos las tablas tripulación y dependencias por el código dedependencia_trabajar y el código de la dependencia, obteniendo de este modo las dependenciasdonde trabaja algún tripulante. Además exigimos que el servicio que controla a dichas dependenciasse denomine Seguridad, de modo que al unir ambas condiciones, obtenemos las dependenciascontroladas por algún servicio cuyo nombre sea Seguridad, y de aquí mostramos el nombre de lostripulantes que trabajan en dichas dependencias. SELECT NOMBRE_TRIP FROM TRIPULACION, DEPENDENCIAS WHERE CODIGO_DEPENDENCIA_TRABAJAR=CODIGO_DEP AND NOMBRE_SERVICIO=Seguridad; El resultado de la consulta es: Ninguna fila seleccionada. El resultado es completamente lógico, ya que no hay ningún tripulante que trabaje en unadependencia, la cual está bajo el control de un servicio de Seguridad, puesto que los servicios deseguridad controlan las dependencias de descanso, y en estas no trabaja nadie, en estasdependencias, todos los tripulantes lo único que hacen es alojarse. d) En esta consulta, nos piden que demos una relación de categorías de aquellos tripulantesque no han visitado los mismos planetas que “Pedro Picapiedra”. SELECT DISTINCT CATEGORÍA_TRIP FROM TRIPULACION WHERE CODIGO_TRIP NOT IN (SELECT T1.CODIGO_TRIP FROM TRIPULACION T1 WHERE NOT EXISTS (SELECT CODIGO_PLANETA FROM VISITADO V1 JOIN TRIPULACION T2 ON V1.CODIGO_TRIP=T2.CODIGO_TRIP WHERE T2.NOMBRE_TRIP=Pedro Picapiedra AND NOT EXISTS (SELECT * FROM VISITADO V2 WHERE V2.CODIGO_TRIP=T1.CODIGO_TRIP AND V2.CODIGO_PLANETA=V1.CODIGO_PLANETA))); Esta consulta, a mi juicio, es la más compleja de las 5, (suponiendo que las otras las hayahecho bien, claro está). La dividimos en 4 consultas. De esta súper consulta obtendremos lacategoría de los tripulantes, sin duplicados (DISTINCT), cuyo código tripulante no esté en laprimera subconsulta. De la primera subconsulta obtenemos el código del tripulante de la tabla tripulación, que noesté en la segunda subconsulta. De la segunda subconsulta unimos las tablas visitado y tripulación, por el código deltripulante, obteniendo una lista con todos los tripulantes que han visitado algún planeta. Y de esta 12
  • Diseño de Base de Datos Proyecto Finallista cogemos sólo aquel tripulante cuyo nombre sea Pedro Picapiedra. Pero además se debe cumplirotra condición, que es la que obtenemos de la tercera subconsulta. La tercera subconsulta lo seleccionamos todo de la tabla visitado, obteniendo una lista contoda la información de las visitas correspondiente a los tripulantes que han realizado alguna visita, yque el código de los planetas visitados coincida con el código de los planetas visitados por PedroPicapiedra. Recapitulando, de las 3 subconsultas obtenemos toda la información sobre los tripulantesque han visitado los mismos planetas que ha visitado Pedro Picapiedra. Y con la consulta inicial, detodos los tripulantes que han visitado planetas, quitamos a los obtenidos de las 3 subconsultas,sacando por pantalla la categoría de dichos tripulantes. El resultado de la consulta es: CATEGORÍA_TRIP --------------- Comercial General Militar e) En la última de las consultas, nos piden que hagamos una modificación de uno de losdatos de nuestra base de datos, y es que el planeta Europa, ha cambiado de código, a pasado de serel EUR01 a ser el UE001. INSERT INTO PLANETA VALUES (UE001, Europa, Via_Lactea, 490.74); UPDATE VISITADO SET CODIGO_PLANETA=UE001 WHERE CODIGO_PLANETA=EUR01; UPDATE ESTAR_POBLADO SET CODIGO_PLANETA=UE001 WHERE CODIGO_PLANETA=EUR01; DELETE FROM PLANETA WHERE CODIGO_PLANETA=EUR01; El problema que se nos plantea en esa operación, es que Oracle9i, no soporta la instrucciónUPDATE en la creación de tablas, de modo que cuando nosotros creamos las tablas con susrestricciones, no pudimos poner la opción, de que si algún dato se modifica, se actualicen todos losregistros que hagan referencia a dicho registro. Ahora, sólo podremos cambiar este dato, si no hayningún registro que le referencie. De modo que lo primero que hacemos es crearnos un nuevoregistro con los mismos datos que el planeta Europa, en la tabla Planeta, pero con el nuevo código.Después actualizamos la tabla visitado y estar_poblado, de modo que todos los registros quetuviesen como código de planeta de Europa el antiguo código, tengan el nuevo. La sintaxis SQL es la siguiente: UPDATE TABLE [Nombre de la tabla] SET [Modificación] WHERE [Condición] Una vez actualizados estos registros, ya podemos borrar el registro del planeta Europa, en latabla Planeta, puesto que ya no hay ningún registro que le referencie. El resultado de la operación es: CODIGO_TRIP CODIGO NUMERO_DE_VISITA TIEMPO_DE_VISITA ----------- ------ ---------------- ---------------- 1 TIE 1 56 1 TIE 2 72 1 PLU 1 24 2 MER 1 42 13
  • Diseño de Base de Datos Proyecto Final 2 VEN 1 45 2 TIE 1 23 2 MAR 1 42 2 JUP 1 42 2 SAT 1 42 2 URA 1 42 2 NEP 1 42 CODIGO_TRIP CODIGO NUMERO_DE_VISITA TIEMPO_DE_VISITA ----------- ------ ---------------- ---------------- 2 PLU 1 42 2 LUN01 1 42 2 TIT01 1 42 2 UE001 1 42 2 GAN01 1 42 2 CAL01 1 42 2 MIM01 1 42 3 VEN 1 56 4 URA 1 72 5 NEP 1 24 6 MAR 1 8 CODIGO_TRIP CODIGO NUMERO_DE_VISITA TIEMPO_DE_VISITA ----------- ------ ---------------- ---------------- 7 MER 1 36 8 JUP 1 24 8 UE001 1 36 9 TIE 1 36 3 CAL01 1 24 5 UE001 1 50 6 TIT01 1 60 7 LUN01 1 50 30 filas seleccionadas.Podemos observar que se ha actualizado la tabla visitado correctamente. La tabla estar_pobladotambién se ha actualizado correctamente, pero como no había ninguna raza que viviese allí, pues nohabía ninguna fila seleccionada.En la tabla planeta también se han modificado correctamente los datos.A continuación mostraremos las consultas realizadas mediante operadores del álgebra relacional:a)b)c) 14
  • Diseño de Base de Datos Proyecto Finald) 15