Sei sulla pagina 1di 9

BASES DE DATOS AVANZADAS

PRACTICA 1 - SCONDORI

La siguiente práctica es individual, y se debe presentar un informe con los


requerimientos y captura de pantallas correspondiente. Para un mejor control de los
siguientes requerimientos, se sugiere tomar en cuenta a los usuarios y sus objetos
pudiendo cambiar el nombre de todos los objetos en la Base de Datos.

1. Crear como administrador tres usuarios U1, U2 y U3, con los privilegios
necesarios y en sus respectivos Espacios de Trabajo.

U1: SGALDO
U2: FALVAREZ
U3: APEREZ

SQL:

CREATE TABLESPACE "USER"


LOGGING
DATAFILE 'C:\ORACLE\ORADATA\ORCL\USER .ora' SIZE 5M EXTENT
MANAGEMENT LOCAL

CREATE USER "USER" PROFILE "DEFAULT"


IDENTIFIED BY " DEFAULT TABLESPACE "USERS" ACCOUNT UNLOCK;
GRANT "CONNECT" TO "USER";

2. Analizar el diseño y optimizar para un mejor tratamiento de los datos y exponga


su Diseño Conceptual con el que trabajará.
3. Crear las siguientes relaciones e insertar sus tuplas de acuerdo al Usuario y en
la cuenta de dicho usuario:

U1: Crear las siguientes Relaciones: Clientes, Ciudades

CREATE TABLE CIUDADES (ID_CIUDAD VARCHAR2 (5) NOT NULL, NOMBRE


VARCHAR2 (20) NOT NULL, DIRECCION VARCHAR2 (100), ESTADO VARCHAR2 (30) NOT NULL,
PRIMARY KEY(ID_CIUDAD));

CREATE TABLE CLIENTES (ID_CLIENTE VARCHAR2 (5) NOT NULL, NOMBRE


VARCHAR2 (50) NOT NULL, FECHA_REGISTRO DATE NOT NULL, RESIDENCIA VARCHAR2 (5)
NOT NULL, PRIMARY KEY(ID_CLIENTE),FOREIGN KEY (RESIDENCIA) REFERENCES
CIUDADES(ID_CIUDAD));

U2: Crear las siguientes Relaciones: Existencias, Pedidos, Items.

CREATE TABLE TAMANIO (ID_TAMANIO NUMBER (2) NOT NULL, DESCRIPCION


VARCHAR2 (20) NOT NULL, PRIMARY KEY(ID_TAMANIO));

CREATE TABLE ITEMS (ID_ITEM VARCHAR2 (5) NOT NULL, DESCRIPCION


VARCHAR2(50) NOT NULL, TAMANIO NUMBER (2), PESO NUMBER NOT NULL, PRIMARY
KEY(ID_ITEM),FOREIGN KEY (TAMANIO) REFERENCES TAMANIO(ID_TAMANIO));

CREATE TABLE EXISTENCIAS (ID_ALMACEN VARCHAR2 (5) NOT NULL, ID_ITEM


VARCHAR2 (5) NOT NULL, CANTIDAD NUMBER NOT NULL, FOREIGN KEY (ID_ITEM)
REFERENCES ITEMS(ID_ITEM), FOREIGN KEY (ID_ALMACEN) REFERENCES
APEREZ.ALMACENES(ID_ALMACEN));

CREATE TABLE PEDIDOS (NUM_PEDIDO NUMBER NOT NULL, FECHA DATE NOT
NULL, ID_CLIENTE VARCHAR2 (5 ) NOT NULL, PRIMARY KEY (NUM_PEDIDO), FOREIGN KEY
(ID_CLIENTE) REFERENCES SGALDO.CLIENTES(ID_CLIENTE) );
U3: Crear las siguientes Relaciones: Almacenes, Items-Pedidos

CREATE TABLE ALMACENES (ID_ALMACEN VARCHAR2 (5) NOT NULL,


CATEGORIA NUMBER NOT NULL, RESIDENCIA VARCHAR2 (5), TELEFONO NUMBER NOT NULL,
PRIMARY KEY(ID_ALMACEN),FOREIGN KEY (RESIDENCIA) REFERENCES SGALDO.CIUDADES
(ID_CIUDAD));

CREATE TABLE ITEMS_PEDIDOS (ID_ITEM VARCHAR2 (5) NOT NULL,


NUM_PEDIDOS NUMBER NOT NULL, CANTIDAD NUMBER NOT NULL, FOREIGN KEY (ID_ITEM)
REFERENCES FALVAREZ.ITEMS (ID_ITEM), FOREIGN KEY (NUM_PEDIDOS) REFERENCES
FALVAREZ.PEDIDOS (NUM_PEDIDO) );

4. CONCESIÓN DE PRIVILEGIOS

U1: Conceder privilegios de SELECT e INSERT a los usuarios U2 y U3 sobre


sus dos tablas.

GRANT SELECT,INSERT ON CLIENTES TO FALVAREZ,APEREZ;


GRANT SELECT,INSERT ON CIUDADES TO FALVAREZ,APEREZ;

U2: Conceder privilegios de SELECT a todos los usuarios sobre todas sus
tablas.

GRANT SELECT ON EXISTENCIAS TO PUBLIC;


GRANT SELECT ON PEDIDOS TO PUBLIC;
GRANT SELECT ON ITEMS TO PUBLIC;

U3: Conceder privilegios de SELECT e INSERT a U2 y de SELECT y UPDATE al


usuario U1.

GRANT SELECT,INSERT ON ALMACENES TO FALVAREZ;


GRANT SELECT,INSERT ON ITEMS_PEDIDOS TO FALVAREZ;
GRANT SELECT,UPDATE ON ALMACENES TO SGALDO;
GRANT SELECT,UPDATE ON ITEMS_PEDIDOS TO SGALDO;

NOTA: PARA LA ESPECIFICACIÓN DE LLAVES FORÁNEAS ES NECESARIA LA


CONCESIÓN DEL PRIVILEGIO “REFERENCES”.
RESULTADO DE LA CONCESION DE PRIVILEGIOS:

SGALDO:

FALVAREZ:

APEREZ:
5. CREAR VISTAS

U1: Crear una vista vertical con el nombre de PEDIDOS_VISTA (NUM-PEDIDO,


NOMBRE-CLIENTE) en base a la tabla PEDIDOS; y una vista con el nombre de
CIUDADES_VISTA en base a la tabla CIUDADES.

CREATE VIEW PEDIDOS_VISTA (NUM_PEDIDO, NOMBRE) AS SELECT


NUM_PEDIDO, NOMBRE FROM FALVAREZ.PEDIDOS,CLIENTES WHERE PEDIDOS.ID_CLIENTE =
CLIENTES.ID_CLIENTE;

CREATE VIEW CIUDADES_VISTA (NOMBRE, DIRECCION, ESTADO) AS SELECT


NOMBRE, DIRECCION, ESTADO FROM CIUDADES;

U2: Crear un vista horizontal con el nombre de EXISTENCIAS_VISTA (donde ID-


ITEM=1) de la tabla EXISTENCIAS; también crear vista con el nombre de
BOSTON_DATOS donde mostrará los almacenes y clientes que residen en BOSTON.

CREATE VIEW EXISTENCIAS_VISTA AS SELECT * FROM EXISTENCIAS WHERE ID_ITEM


= 'L1';

CREATE VIEW BOSTON_DATOS AS SELECT NOMBRE FROM SGALDO.CLIENTES WHERE


RESIDENCIA = 'BOS' UNION SELECT ID_ALMACEN FROM APEREZ.ALMACENES WHERE
RESIDENCIA = 'BOS';

U3: Crear un vista horizontal ITEM_PEDIDOS_VISTA (donde ID-TEM= L1) en


base la tabla ITEM-PEDIDOS; crear también una vista horizontal con el nombre de
ALMACENES_VISTA a partir de la relación ALMACENES donde mostrará a los almacenes
que no están en BOSTON.
CREATE VIEW ITEMS_PEDIDOS_VISTA AS SELECT * FROM ITEMS_PEDIDOS WHERE
ID_ITEM = 'L1';

CREATE VIEW ALMACENES_VISTA AS SELECT * FROM ALMACENES WHERE RESIDENCIA


¡= 'BOS';

6. CONSULTAS (utilice SqlPlus)

U1: Encontrar el teléfono de ALM-A.

SELECT TELEFONO FROM APEREZ.ALMACENES WHERE ID_ALMACEN = 'ALMA';

U2: Encontrar todos los datos de los ID-ITEMS del Pedidos 2 (PED2).

SELECT * FROM FALVAREZ.ITEMS WHERE ID_ITEM IN (SELECT ID_ITEM FROM


APEREZ.ITEMS_PEDIDOS WHERE NUM_PEDIDOS = 2);

U3: Encontrar la descripción del ítem L2.

SELECT DESCRIPCION FROM FALVAREZ.ITEMS WHERE ID_ITEM = 'L2';

U1, U2: Encontrar todos los almacenes donde existe el ítem L1 y L4.

U1 : SELECT * FROM APEREZ.ALMACENES WHERE ID_ALMACEN IN (SELECT


ID_ALMACEN FROM FALVAREZ.EXISTENCIAS WHERE ID_ITEM = 'L1' OR ID_ITEM = 'L4');

U2 : SELECT * FROM APEREZ.ALMACENES WHERE ID_ALMACEN IN (SELECT


ID_ALMACEN FROM EXISTENCIAS WHERE ID_ITEM = 'L1' OR ID_ITEM = 'L4');
U1, U3: Encontrar el teléfono de los almacenes que suministran el ítem L3.

U1 : SELECT TELEFONO FROM APEREZ.ALMACENES WHERE ID_ALMACEN IN (SELECT


ID_ALMACEN FROM FALVAREZ.EXISTENCIAS WHERE ID_ITEM = 'L1' OR ID_ITEM = 'L3');

U3 : SELECT TELEFONO FROM ALMACENES WHERE ID_ALMACEN IN (SELECT


ID_ALMACEN FROM FALVAREZ.EXISTENCIAS WHERE ID_ITEM = 'L1' OR ID_ITEM = 'L3');

U2, U3: Encontrar el teléfono del almacén donde se encuentra el ítem del PED2.

U2 : SELECT TELEFONO FROM APEREZ.ALMACENES WHERE ID_ALMACEN IN (SELECT


ID_ALMACEN FROM EXISTENCIAS WHERE ID_ITEM IN (SELECT ID_ITEM FROM
APEREZ.ITEMS_PEDIDOS WHERE NUM_PEDIDOS = 2));

U3 : SELECT TELEFONO FROM ALMACENES WHERE ID_ALMACEN IN (SELECT


ID_ALMACEN FROM FALVAREZ.EXISTENCIAS WHERE ID_ITEM IN (SELECT ID_ITEM FROM
ITEMS_PEDIDOS WHERE NUM_PEDIDOS = 2));

U1, U2: Encontrar los almacenes con los ítems que ha pedido el cliente JILL.

U1 : SELECT ID_ALMACEN FROM APEREZ.ALMACENES WHERE ID_ALMACEN IN


(SELECT ID_ALMACEN FROM FALVAREZ.EXISTENCIAS WHERE ID_ITEM IN (SELECT ID_ITEM
FROM FALVAREZ.PEDIDOS WHERE ID_CLIENTE = 'JILLV'));

U2 : SELECT ID_ALMACEN FROM APEREZ.ALMACENES WHERE ID_ALMACEN IN


(SELECT ID_ALMACEN FROM EXISTENCIAS WHERE ID_ITEM IN (SELECT ID_ITEM FROM
PEDIDOS WHERE ID_CLIENTE = 'JILLV'));

U1, U3: Encontrar las direcciones de todos los almacenes que tienen una
cantidad existente de mas de 150.

U1 : SELECT RESIDENCIA FROM APEREZ.ALMACENES WHERE ID_ALMACEN IN


(SELECT ID_ALMACEN FROM FALVAREZ.EXISTENCIAS WHERE CANTIDAD > 150);

U3 : SELECT RESIDENCIA FROM ALMACENES WHERE ID_ALMACEN IN (SELECT


ID_ALMACEN FROM FALVAREZ.EXISTENCIAS WHERE CANTIDAD > 150);
U2, U3: Encontrar los ID-ITEM del cliente VICKI.

U2 : SELECT ID_ITEM, DESCRIPCION FROM ITEMS WHERE ID_ITEM IN (SELECT


ID_ITEM FROM APEREZ.ITEMS_PEDIDOS WHERE NUM_PEDIDOS IN (SELECT NUM_PEDIDO
FROM PEDIDOS WHERE ID_CLIENTE= 'VICKG'));

U3 : SELECT ID_ITEM, DESCRIPCION FROM FALVAREZ.ITEMS WHERE ID_ITEM IN


(SELECT ID_ITEM FROM ITEMS_PEDIDOS WHERE NUM_PEDIDOS IN (SELECT NUM_PEDIDO
FROM FALVAREZ.PEDIDOS WHERE ID_CLIENTE= 'VICKG'));

U1, U3: Encontrar la descripción de los ítems de PED2

U1 : SELECT DESCRIPCION FROM FALVAREZ.ITEMS WHERE ID_ITEM IN (SELECT


ID_ITEM FROM APEREZ.ITEMS_PEDIDOS WHERE NUM_PEDIDOS = 2);

U3 : SELECT DESCRIPCION FROM FALVAREZ.ITEMS WHERE ID_ITEM IN (SELECT


ID_ITEM FROM ITEMS_PEDIDOS WHERE NUM_PEDIDOS = 2);

U2, U3: Encontrar los ID-ALAMACENES donde la cantidad existente esta por
debajo del promedio.

U2 : SELECT ID_ALMACEN FROM APEREZ.ALMACENES WHERE ID_ALMACEN IN


(SELECT ID_ALMACEN FROM EXISTENCIAS WHERE CANTIDAD < (SELECT AVG(CANTIDAD)
FROM EXISTENCIAS));

U3 : SELECT ID_ALMACEN FROM ALMACENES WHERE ID_ALMACEN IN (SELECT


ID_ALMACEN FROM FALVAREZ.EXISTENCIAS WHERE CANTIDAD < (SELECT AVG(CANTIDAD)
FROM FALVAREZ.EXISTENCIAS));
ANEXOS : Inserción de datos:

INSERT INTO CIUDADES VALUES('ALB','ALBANY', 'DIR1', 'NEW YORK');


INSERT INTO CIUDADES VALUES('BOS','BOSTON', 'DIR2', 'MASSACHUSETTS');
INSERT INTO CIUDADES VALUES('CHI','CHICAGO', 'DIR3', 'ILLINOIS');

INSERT INTO CLIENTES VALUES('JILLV','JILL VALENTINE','12-ABR-2008', 'BOS');


INSERT INTO CLIENTES VALUES('JACKS','JACK SKELETON','24-ABR-2009', 'ALB');
INSERT INTO CLIENTES VALUES('VICKG','VICKI GENFAN','3-MAY-2009', 'BOS');

INSERT INTO TAMANIO VALUES(3, 'MINIATURA');


INSERT INTO TAMANIO VALUES(4, 'PEQUEÑA');
INSERT INTO TAMANIO VALUES(5, 'MEDIANA');
INSERT INTO TAMANIO VALUES(6, 'GRANDE');
INSERT INTO TAMANIO VALUES(7, 'ENORME');

INSERT INTO ITEMS VALUES('L1', 'PUERTA', 4, 9);


INSERT INTO ITEMS VALUES('L2', 'LAMPARA', 6, 12);
INSERT INTO ITEMS VALUES('L3', 'VENTANA', 6, 15);
INSERT INTO ITEMS VALUES('L4', 'VENTANA', 4, 12);

INSERT INTO EXISTENCIAS VALUES('ALMA', 'L1', 300);


INSERT INTO EXISTENCIAS VALUES('ALMA', 'L1', 200);
INSERT INTO EXISTENCIAS VALUES('ALMA', 'L3', 400);
INSERT INTO EXISTENCIAS VALUES('ALMD', 'L3', 150);
INSERT INTO EXISTENCIAS VALUES('ALMB', 'L2', 400);
INSERT INTO EXISTENCIAS VALUES('ALMA', 'L4', 150);
INSERT INTO EXISTENCIAS VALUES('ALMC', 'L3', 400);
INSERT INTO EXISTENCIAS VALUES('ALMD', 'L4', 100);

INSERT INTO PEDIDOS VALUES(1, '1-MARCH-2009', 'JILLV');


INSERT INTO PEDIDOS VALUES(2, '29-APRIL-2009', 'JACKS');
INSERT INTO PEDIDOS VALUES(3, '4-MAY-2009', 'VICKG');
INSERT INTO PEDIDOS VALUES(4, '4-MAY-2009', 'VICKG');

INSERT INTO ALMACENES VALUES('ALMA', 1, 'ALB', 6679327);


INSERT INTO ALMACENES VALUES('ALMB', 3, 'BOS', 7251722);
INSERT INTO ALMACENES VALUES('ALMC', 2, 'BOS', 6361825);
INSERT INTO ALMACENES VALUES('ALMD', 1, 'CHI', 6793053);

INSERT INTO ITEMS_PEDIDOS VALUES('L1', 1, 11);


INSERT INTO ITEMS_PEDIDOS VALUES('L2', 2, 3);
INSERT INTO ITEMS_PEDIDOS VALUES('L3', 1, 11);
INSERT INTO ITEMS_PEDIDOS VALUES('L1', 3, 7);
INSERT INTO ITEMS_PEDIDOS VALUES('L4', 2, 9);
INSERT INTO ITEMS_PEDIDOS VALUES('L1', 4, 22);

Potrebbero piacerti anche