SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
Proyecto de
Base 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 E

PARTE II



I.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 4




I.V.-Operaciones sobre los datos.........................................................................................Página 10
Diseño de Base de Datos                                                                     Proyecto Final



                    PROYECTO FINAL DE DISEÑO DE BASE DE DATOS

PARTE II

       En esta segunda parte de nuestro proyecto final de base de datos, nos introduciremos en
Oracle9i, es decir, todo nuestro diseño lo adaptaremos de modo que podamos crear nuestra base de
datos en Oracle9i. Para ello, lo primero que haremos será modificar un par de aspectos que en
nuestro diseño original no se pueden implementar en Oracle9i, o si se pueden, nosotros no sabemos
hacerlo.

I.IV.-Creación de los Datos

        A continuación modificaremos los scripts realizados en la parte primera del proyecto, con el
fin de adaptarlo a Oracle.


Paso1.- Creación de las Tablas.

La siguiente tabla contiene la información sobre las dependencias de la nave espacial. Toda
dependencia debe estar bajo el control de un servicio, en el caso de no asignarle ningún servicio, por
defecto 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, de
modo que el codigo_cam coincidirá con el codigo_dep de alguna dependencia. Además, cámara
tiene dos campos más que son categoría y capacidad, donde almacenaremos la categoría de la
cá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 Final



CREATE 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 que
todo servicio debe estar asignado como mínimo a una dependencia. En el caso de que a un servicio
no le hubiésemos asignado ninguna dependencia, dicho servicio estaría asignado por defecto a la
dependencia 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 puede
existir 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 cada
tripulante, 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 campo
cantidad_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 Final



Paso2.- Introducción de las restricciones.

        Una vez creadas las tablas, modificamos el script de restricciones. En Oracle9i sólo se
permite el borrado en cascada, y el resto de opciones de borrado y modificación que hicimos en la
parte primera del proyecto no las acepta. De modo que no nos dejará borrar ni modificar nada, si
hace referencia algún dato de la base de datos a un determinado registro, ya que por defecto
Oracle9i realiza borrado y actualización restringida. Lo que supone que cada vez que queramos
actualizar o borrar algún dato al que le hagan referencia otros registros, tendremos que modificar
primero el registro al cual nadie referencia, y después modificar el registro principal al que hacian
referencia los otros registros, pues al cambiarlo inicialmente en los otros registros ahora ya no hay
ninguno 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 los
datos en ella, es decir, vamos a poblar nuestra base de datos. La sintaxis SQL a utilizar es la
siguiente: 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 Final

'General', '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 consultas
y/o operaciones sobre nuestra base de datos.

       a) En la primera de ellas, deseamos saber los planetas visitados por el tripulante “Pedro
Picapiedra”, dando una lista con el nombre de dichos planetas, mostrando la raza que lo habita y la
cantidad 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 el
código del tripulante, seleccionando el código de los planetas visitados por aquel tripulante cuyo
nombre sea Pedro Picapiedra.
        Una vez realizada esta selección de planetas, seleccionamos sin duplicados, por ello el
DISTINCT, ya que pueden haber realizado más de una visita al mismo planeta, y como la
información que se desea va a ser la misma en ambas visitas, no me interesa que salgan todas las
veces que se haya visitado dicho planeta.
        Unimos las tablas planeta y estar_poblado por el código del planeta, obteniendo los planetas
que están poblados, pero como puede ocurrir que un planeta no esté poblado, por ello ponemos el
LEFT 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 de
los planetas obtenidos en la subconsulta, y de estos mostramos su código, la cantidad de individuos
y 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 su
capacidad máxima.

       Esta consulta se divide en dos. En la subconsulta, unimos las tablas tripulación y cámara, por
el código de dependencia alojar con el código de cámara, de modo que obtenemos una lista con el
código de cámara donde se aloja algún tripulante, y lo agrupo en función de la capacidad de la
cámara y del código de la cámara. Además sumamos todos los tripulantes que hay en cada grupo
obtenido 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 y
de cámara, obteniendo de este modo sólo las dependencias que son cámara. Si el código de las
cámaras obtenidas se corresponde con alguno de los códigos obtenidos en la subconsulta, me
aperecerá 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ámaras
que están al aforo completo, pero como cámara la conocemos a partir de dependencias, puesto que
una cámara es una dependencia, lo hemos hecho de este modo pensando que era más correcta su
implementació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, cuyo
servicio que la controla se llama seguridad.

        En esta consulta unimos las tablas tripulación y dependencias por el código de
dependencia_trabajar y el código de la dependencia, obteniendo de este modo las dependencias
donde trabaja algún tripulante. Además exigimos que el servicio que controla a dichas dependencias
se denomine Seguridad, de modo que al unir ambas condiciones, obtenemos las dependencias
controladas por algún servicio cuyo nombre sea Seguridad, y de aquí mostramos el nombre de los
tripulantes 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 una
dependencia, la cual está bajo el control de un servicio de Seguridad, puesto que los servicios de
seguridad controlan las dependencias de descanso, y en estas no trabaja nadie, en estas
dependencias, 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 tripulantes
que 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 haya
hecho bien, claro está). La dividimos en 4 consultas. De esta súper consulta obtendremos la
categoría de los tripulantes, sin duplicados (DISTINCT), cuyo código tripulante no esté en la
primera subconsulta.
        De la primera subconsulta obtenemos el código del tripulante de la tabla tripulación, que no
esté en la segunda subconsulta.
        De la segunda subconsulta unimos las tablas visitado y tripulación, por el código del
tripulante, obteniendo una lista con todos los tripulantes que han visitado algún planeta. Y de esta

                                                                                                   12
Diseño de Base de Datos                                                                    Proyecto Final


lista cogemos sólo aquel tripulante cuyo nombre sea Pedro Picapiedra. Pero además se debe cumplir
otra condición, que es la que obtenemos de la tercera subconsulta.
        La tercera subconsulta lo seleccionamos todo de la tabla visitado, obteniendo una lista con
toda la información de las visitas correspondiente a los tripulantes que han realizado alguna visita, y
que el código de los planetas visitados coincida con el código de los planetas visitados por Pedro
Picapiedra.
        Recapitulando, de las 3 subconsultas obtenemos toda la información sobre los tripulantes
que han visitado los mismos planetas que ha visitado Pedro Picapiedra. Y con la consulta inicial, de
todos 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 los
datos de nuestra base de datos, y es que el planeta Europa, ha cambiado de código, a pasado de ser
el 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ón
UPDATE en la creación de tablas, de modo que cuando nosotros creamos las tablas con sus
restricciones, no pudimos poner la opción, de que si algún dato se modifica, se actualicen todos los
registros que hagan referencia a dicho registro. Ahora, sólo podremos cambiar este dato, si no hay
ningún registro que le referencie. De modo que lo primero que hacemos es crearnos un nuevo
registro 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 que
tuviesen 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 la
tabla 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_poblado
también se ha actualizado correctamente, pero como no había ninguna raza que viviese allí, pues no
habí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 Final


d)




                                     15

Más contenido relacionado

La actualidad más candente (19)

Diseño de pantallas
Diseño de pantallasDiseño de pantallas
Diseño de pantallas
 
Comandos mysql
Comandos mysqlComandos mysql
Comandos mysql
 
Practicassql
PracticassqlPracticassql
Practicassql
 
Sentencias SQL Update y Delete
Sentencias SQL Update y DeleteSentencias SQL Update y Delete
Sentencias SQL Update y Delete
 
Ejercicios base datos
Ejercicios base datosEjercicios base datos
Ejercicios base datos
 
Guía 05. Consultas resumen con MySQL - José J Sánchez H
Guía 05. Consultas resumen con MySQL - José J Sánchez HGuía 05. Consultas resumen con MySQL - José J Sánchez H
Guía 05. Consultas resumen con MySQL - José J Sánchez H
 
Primeros Pasos Aplicacion Java conexión BD Mysql
Primeros Pasos Aplicacion Java conexión BD MysqlPrimeros Pasos Aplicacion Java conexión BD Mysql
Primeros Pasos Aplicacion Java conexión BD Mysql
 
Ddl
DdlDdl
Ddl
 
Manejo de estructuras de datos
Manejo de estructuras de datosManejo de estructuras de datos
Manejo de estructuras de datos
 
Instituto tecnológico superior de zongolicaarturo
Instituto tecnológico superior de zongolicaarturoInstituto tecnológico superior de zongolicaarturo
Instituto tecnológico superior de zongolicaarturo
 
Consultas
ConsultasConsultas
Consultas
 
Metodos en php
Metodos en phpMetodos en php
Metodos en php
 
Weka
WekaWeka
Weka
 
Weka
WekaWeka
Weka
 
Control JTable con base de datos.pdf
Control JTable con base de datos.pdfControl JTable con base de datos.pdf
Control JTable con base de datos.pdf
 
89 Php. Tablas Inno Db
89 Php. Tablas Inno Db89 Php. Tablas Inno Db
89 Php. Tablas Inno Db
 
Tallerprogramacion
TallerprogramacionTallerprogramacion
Tallerprogramacion
 
Ejercicios básicos, bases de datos SQL
Ejercicios básicos, bases de datos SQL Ejercicios básicos, bases de datos SQL
Ejercicios básicos, bases de datos SQL
 
Actividades unidad 3 pacheco
Actividades unidad 3 pachecoActividades unidad 3 pacheco
Actividades unidad 3 pacheco
 

Destacado

Organizacion
OrganizacionOrganizacion
Organizaciondekama
 
Sistemas gestores de bases de datos
Sistemas gestores de bases de datosSistemas gestores de bases de datos
Sistemas gestores de bases de datosuap
 
Derechos humanos y garantias individuales
Derechos humanos y garantias individualesDerechos humanos y garantias individuales
Derechos humanos y garantias individualesUNITEC
 
Garantías de igualdad
Garantías de igualdadGarantías de igualdad
Garantías de igualdadKareen Ü
 
GarantíAs Individuales
GarantíAs IndividualesGarantíAs Individuales
GarantíAs Individualesguestc8563e5
 
GARANTIAS DE PROPIEDAD
GARANTIAS DE PROPIEDADGARANTIAS DE PROPIEDAD
GARANTIAS DE PROPIEDADcristycorona1
 
Garantias individuales
Garantias individualesGarantias individuales
Garantias individualeschumber23
 
Los Derechos Humanos en la Constitucion Mexicana
Los Derechos Humanos en la Constitucion MexicanaLos Derechos Humanos en la Constitucion Mexicana
Los Derechos Humanos en la Constitucion MexicanaLuis Vargas
 
Clases y formas de la constitucion
Clases y formas de la constitucionClases y formas de la constitucion
Clases y formas de la constitucionAndrea Paola
 
Republica Conservadora (1831-1861)
Republica Conservadora (1831-1861)Republica Conservadora (1831-1861)
Republica Conservadora (1831-1861)cesarmaldonadodiaz
 
10 sistemas gestores de base de datos
10 sistemas gestores de base de datos10 sistemas gestores de base de datos
10 sistemas gestores de base de datosGusttavo Nipas
 

Destacado (14)

Organizacion
OrganizacionOrganizacion
Organizacion
 
Sistemas gestores de bases de datos
Sistemas gestores de bases de datosSistemas gestores de bases de datos
Sistemas gestores de bases de datos
 
Derechos humanos y garantias individuales
Derechos humanos y garantias individualesDerechos humanos y garantias individuales
Derechos humanos y garantias individuales
 
Garantías de igualdad
Garantías de igualdadGarantías de igualdad
Garantías de igualdad
 
GarantíAs Individuales
GarantíAs IndividualesGarantíAs Individuales
GarantíAs Individuales
 
GARANTIAS DE PROPIEDAD
GARANTIAS DE PROPIEDADGARANTIAS DE PROPIEDAD
GARANTIAS DE PROPIEDAD
 
Garantias individuales
Garantias individualesGarantias individuales
Garantias individuales
 
Los Derechos Humanos en la Constitucion Mexicana
Los Derechos Humanos en la Constitucion MexicanaLos Derechos Humanos en la Constitucion Mexicana
Los Derechos Humanos en la Constitucion Mexicana
 
Tipos de constitución
Tipos de constituciónTipos de constitución
Tipos de constitución
 
Clases y formas de la constitucion
Clases y formas de la constitucionClases y formas de la constitucion
Clases y formas de la constitucion
 
Garantías individuales
Garantías individualesGarantías individuales
Garantías individuales
 
Uso de las Bases De Datos
Uso de las Bases De DatosUso de las Bases De Datos
Uso de las Bases De Datos
 
Republica Conservadora (1831-1861)
Republica Conservadora (1831-1861)Republica Conservadora (1831-1861)
Republica Conservadora (1831-1861)
 
10 sistemas gestores de base de datos
10 sistemas gestores de base de datos10 sistemas gestores de base de datos
10 sistemas gestores de base de datos
 

Similar a Base de Datos Proyecto Parte II

Base datos mysql y visual basic
Base datos mysql y visual basicBase datos mysql y visual basic
Base datos mysql y visual basicRafael Tobar Jame
 
SQL-DDL
SQL-DDLSQL-DDL
SQL-DDLbdatos
 
04-SQLBuenaPresentaciónyConceptos.pdf
04-SQLBuenaPresentaciónyConceptos.pdf04-SQLBuenaPresentaciónyConceptos.pdf
04-SQLBuenaPresentaciónyConceptos.pdfssuser78e8eb
 
Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)José Toro
 
Creación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchCreación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchJair Ospino Ardila
 
Proyecto De Aplicacion A La Bases Datos
Proyecto De Aplicacion A La Bases DatosProyecto De Aplicacion A La Bases Datos
Proyecto De Aplicacion A La Bases DatosAndreitap de Granda
 
05 Sql Profundizacion
05 Sql Profundizacion05 Sql Profundizacion
05 Sql ProfundizacionKudos S.A.S
 
Colegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexico
Colegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexicoColegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexico
Colegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexico25415252
 
Aplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slideAplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slidemarieuri
 
Portafolio 1 sql
Portafolio 1 sqlPortafolio 1 sql
Portafolio 1 sqlJuanKMillos
 
Trabajo grupal - Base de Datos
Trabajo grupal - Base de DatosTrabajo grupal - Base de Datos
Trabajo grupal - Base de DatosMIROSLAVY
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollbackArchCHUZ
 
Generacion bd casopractico0708
Generacion bd casopractico0708Generacion bd casopractico0708
Generacion bd casopractico0708mbmmario
 

Similar a Base de Datos Proyecto Parte II (20)

Base datos mysql y visual basic
Base datos mysql y visual basicBase datos mysql y visual basic
Base datos mysql y visual basic
 
SQL-DDL
SQL-DDLSQL-DDL
SQL-DDL
 
Práctica SQL en MYSQL
Práctica SQL en MYSQLPráctica SQL en MYSQL
Práctica SQL en MYSQL
 
04-SQL.pdf
04-SQL.pdf04-SQL.pdf
04-SQL.pdf
 
04-SQLBuenaPresentaciónyConceptos.pdf
04-SQLBuenaPresentaciónyConceptos.pdf04-SQLBuenaPresentaciónyConceptos.pdf
04-SQLBuenaPresentaciónyConceptos.pdf
 
Bdii 09 ddl_new
Bdii 09 ddl_newBdii 09 ddl_new
Bdii 09 ddl_new
 
Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)Sesión03 - Creación de objetos (Oracle)
Sesión03 - Creación de objetos (Oracle)
 
Creación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchCreación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbench
 
Proyecto De Aplicacion A La Bases Datos
Proyecto De Aplicacion A La Bases DatosProyecto De Aplicacion A La Bases Datos
Proyecto De Aplicacion A La Bases Datos
 
Reportes con crystalreport
Reportes con crystalreportReportes con crystalreport
Reportes con crystalreport
 
05 Sql Profundizacion
05 Sql Profundizacion05 Sql Profundizacion
05 Sql Profundizacion
 
Colegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexico
Colegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexicoColegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexico
Colegio+de+estudios+cientificos+y+tecnologicos+del+estado+de+mexico
 
Lenguaje de-programacion-iii-visual-fox-pro
Lenguaje de-programacion-iii-visual-fox-proLenguaje de-programacion-iii-visual-fox-pro
Lenguaje de-programacion-iii-visual-fox-pro
 
Lenguaje de-programacion-iii-visual-fox-pro
Lenguaje de-programacion-iii-visual-fox-proLenguaje de-programacion-iii-visual-fox-pro
Lenguaje de-programacion-iii-visual-fox-pro
 
Aplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slideAplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slide
 
Portafolio 1 sql
Portafolio 1 sqlPortafolio 1 sql
Portafolio 1 sql
 
Trabajo grupal - Base de Datos
Trabajo grupal - Base de DatosTrabajo grupal - Base de Datos
Trabajo grupal - Base de Datos
 
Commit&rollback
Commit&rollbackCommit&rollback
Commit&rollback
 
Generacion bd casopractico0708
Generacion bd casopractico0708Generacion bd casopractico0708
Generacion bd casopractico0708
 
taller 1 sql
taller 1 sqltaller 1 sql
taller 1 sql
 

Más de Anna Vega

Seguridad en Redes Inalámbricas
Seguridad en Redes InalámbricasSeguridad en Redes Inalámbricas
Seguridad en Redes InalámbricasAnna Vega
 
Administración de riesgos en un proyecto software
Administración de riesgos en un proyecto softwareAdministración de riesgos en un proyecto software
Administración de riesgos en un proyecto softwareAnna Vega
 
Proyecto de Base de Datos (Parte I)
Proyecto de Base de Datos (Parte I)Proyecto de Base de Datos (Parte I)
Proyecto de Base de Datos (Parte I)Anna Vega
 
Trabajo sobre Symbian os (sistema operativo para móviles)
Trabajo sobre Symbian os (sistema operativo para móviles)Trabajo sobre Symbian os (sistema operativo para móviles)
Trabajo sobre Symbian os (sistema operativo para móviles)Anna Vega
 
Guía usuario para portal creado en Plone
Guía usuario para portal creado en PloneGuía usuario para portal creado en Plone
Guía usuario para portal creado en PloneAnna Vega
 
Guía del administrador del portal sobre Plone
Guía del administrador del portal sobre PloneGuía del administrador del portal sobre Plone
Guía del administrador del portal sobre PloneAnna Vega
 

Más de Anna Vega (6)

Seguridad en Redes Inalámbricas
Seguridad en Redes InalámbricasSeguridad en Redes Inalámbricas
Seguridad en Redes Inalámbricas
 
Administración de riesgos en un proyecto software
Administración de riesgos en un proyecto softwareAdministración de riesgos en un proyecto software
Administración de riesgos en un proyecto software
 
Proyecto de Base de Datos (Parte I)
Proyecto de Base de Datos (Parte I)Proyecto de Base de Datos (Parte I)
Proyecto de Base de Datos (Parte I)
 
Trabajo sobre Symbian os (sistema operativo para móviles)
Trabajo sobre Symbian os (sistema operativo para móviles)Trabajo sobre Symbian os (sistema operativo para móviles)
Trabajo sobre Symbian os (sistema operativo para móviles)
 
Guía usuario para portal creado en Plone
Guía usuario para portal creado en PloneGuía usuario para portal creado en Plone
Guía usuario para portal creado en Plone
 
Guía del administrador del portal sobre Plone
Guía del administrador del portal sobre PloneGuía del administrador del portal sobre Plone
Guía del administrador del portal sobre Plone
 

Base de Datos Proyecto Parte II

  • 1. Proyecto de Base de Datos PARTE II Anna Vega Carrillo 74243557-V 4ºIng.Telecomunicación Diseño de Base de Datos
  • 2. Diseño de Base de Datos Proyecto Final Í N D I C E PARTE II I.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 4 I.V.-Operaciones sobre los datos.........................................................................................Página 10
  • 3. Diseño de Base de Datos Proyecto Final PROYECTO FINAL DE DISEÑO DE BASE DE DATOS PARTE II En esta segunda parte de nuestro proyecto final de base de datos, nos introduciremos en Oracle9i, es decir, todo nuestro diseño lo adaptaremos de modo que podamos crear nuestra base de datos en Oracle9i. Para ello, lo primero que haremos será modificar un par de aspectos que en nuestro diseño original no se pueden implementar en Oracle9i, o si se pueden, nosotros no sabemos hacerlo. I.IV.-Creación de los Datos A continuación modificaremos los scripts realizados en la parte primera del proyecto, con el fin de adaptarlo a Oracle. Paso1.- Creación de las Tablas. La siguiente tabla contiene la información sobre las dependencias de la nave espacial. Toda dependencia debe estar bajo el control de un servicio, en el caso de no asignarle ningún servicio, por defecto 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, de modo que el codigo_cam coincidirá con el codigo_dep de alguna dependencia. Además, cámara tiene dos campos más que son categoría y capacidad, donde almacenaremos la categoría de la cá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
  • 4. Diseño de Base de Datos Proyecto Final CREATE 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 que todo servicio debe estar asignado como mínimo a una dependencia. En el caso de que a un servicio no le hubiésemos asignado ninguna dependencia, dicho servicio estaría asignado por defecto a la dependencia 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 puede existir 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 cada tripulante, 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 campo cantidad_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
  • 5. Diseño de Base de Datos Proyecto Final Paso2.- Introducción de las restricciones. Una vez creadas las tablas, modificamos el script de restricciones. En Oracle9i sólo se permite el borrado en cascada, y el resto de opciones de borrado y modificación que hicimos en la parte primera del proyecto no las acepta. De modo que no nos dejará borrar ni modificar nada, si hace referencia algún dato de la base de datos a un determinado registro, ya que por defecto Oracle9i realiza borrado y actualización restringida. Lo que supone que cada vez que queramos actualizar o borrar algún dato al que le hagan referencia otros registros, tendremos que modificar primero el registro al cual nadie referencia, y después modificar el registro principal al que hacian referencia los otros registros, pues al cambiarlo inicialmente en los otros registros ahora ya no hay ninguno 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
  • 6. 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 los datos en ella, es decir, vamos a poblar nuestra base de datos. La sintaxis SQL a utilizar es la siguiente: 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
  • 7. Diseño de Base de Datos Proyecto Final 'General', '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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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 consultas y/o operaciones sobre nuestra base de datos. a) En la primera de ellas, deseamos saber los planetas visitados por el tripulante “Pedro Picapiedra”, dando una lista con el nombre de dichos planetas, mostrando la raza que lo habita y la cantidad 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
  • 13. Diseño de Base de Datos Proyecto Final En la subconsulta accedemos a las tablas visitado y tripulación, uniendo ambas tablas por el código del tripulante, seleccionando el código de los planetas visitados por aquel tripulante cuyo nombre sea Pedro Picapiedra. Una vez realizada esta selección de planetas, seleccionamos sin duplicados, por ello el DISTINCT, ya que pueden haber realizado más de una visita al mismo planeta, y como la información que se desea va a ser la misma en ambas visitas, no me interesa que salgan todas las veces que se haya visitado dicho planeta. Unimos las tablas planeta y estar_poblado por el código del planeta, obteniendo los planetas que están poblados, pero como puede ocurrir que un planeta no esté poblado, por ello ponemos el LEFT 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 de los planetas obtenidos en la subconsulta, y de estos mostramos su código, la cantidad de individuos y 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 su capacidad máxima. Esta consulta se divide en dos. En la subconsulta, unimos las tablas tripulación y cámara, por el código de dependencia alojar con el código de cámara, de modo que obtenemos una lista con el código de cámara donde se aloja algún tripulante, y lo agrupo en función de la capacidad de la cámara y del código de la cámara. Además sumamos todos los tripulantes que hay en cada grupo obtenido 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 y de cámara, obteniendo de este modo sólo las dependencias que son cámara. Si el código de las cámaras obtenidas se corresponde con alguno de los códigos obtenidos en la subconsulta, me aperecerá 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ámaras que están al aforo completo, pero como cámara la conocemos a partir de dependencias, puesto que una cámara es una dependencia, lo hemos hecho de este modo pensando que era más correcta su implementació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
  • 14. 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, cuyo servicio que la controla se llama seguridad. En esta consulta unimos las tablas tripulación y dependencias por el código de dependencia_trabajar y el código de la dependencia, obteniendo de este modo las dependencias donde trabaja algún tripulante. Además exigimos que el servicio que controla a dichas dependencias se denomine Seguridad, de modo que al unir ambas condiciones, obtenemos las dependencias controladas por algún servicio cuyo nombre sea Seguridad, y de aquí mostramos el nombre de los tripulantes 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 una dependencia, la cual está bajo el control de un servicio de Seguridad, puesto que los servicios de seguridad controlan las dependencias de descanso, y en estas no trabaja nadie, en estas dependencias, 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 tripulantes que 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 haya hecho bien, claro está). La dividimos en 4 consultas. De esta súper consulta obtendremos la categoría de los tripulantes, sin duplicados (DISTINCT), cuyo código tripulante no esté en la primera subconsulta. De la primera subconsulta obtenemos el código del tripulante de la tabla tripulación, que no esté en la segunda subconsulta. De la segunda subconsulta unimos las tablas visitado y tripulación, por el código del tripulante, obteniendo una lista con todos los tripulantes que han visitado algún planeta. Y de esta 12
  • 15. Diseño de Base de Datos Proyecto Final lista cogemos sólo aquel tripulante cuyo nombre sea Pedro Picapiedra. Pero además se debe cumplir otra condición, que es la que obtenemos de la tercera subconsulta. La tercera subconsulta lo seleccionamos todo de la tabla visitado, obteniendo una lista con toda la información de las visitas correspondiente a los tripulantes que han realizado alguna visita, y que el código de los planetas visitados coincida con el código de los planetas visitados por Pedro Picapiedra. Recapitulando, de las 3 subconsultas obtenemos toda la información sobre los tripulantes que han visitado los mismos planetas que ha visitado Pedro Picapiedra. Y con la consulta inicial, de todos 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 los datos de nuestra base de datos, y es que el planeta Europa, ha cambiado de código, a pasado de ser el 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ón UPDATE en la creación de tablas, de modo que cuando nosotros creamos las tablas con sus restricciones, no pudimos poner la opción, de que si algún dato se modifica, se actualicen todos los registros que hagan referencia a dicho registro. Ahora, sólo podremos cambiar este dato, si no hay ningún registro que le referencie. De modo que lo primero que hacemos es crearnos un nuevo registro 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 que tuviesen 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 la tabla 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
  • 16. 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_poblado también se ha actualizado correctamente, pero como no había ninguna raza que viviese allí, pues no habí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
  • 17. Diseño de Base de Datos Proyecto Final d) 15