You are on page 1of 3

CIENCIAS

Carrera
PRIMER PARCIAL
Examen
Profesora: Carmen N. Martnez W.
Asistente: Diana Ferreira

Asignatura:
Secciones
Nombre
Alumno

BASE DE DATOS 2
NA - NB

FECHA
16/04/2013

Tema1
Tema2
Tema3
Tema4
TOTAL

20
25
25
10
80

TEMA 1:
- Agregue las tablas CONTACTOS, PROMOCIONES y PROMOCION_ARTICULO al modelo de la BD utilizada
para las prcticas.
o Las tablas nuevas deben tener las PK y FK que aparecen en el modelo
o En la tabla CONTACTOS, la tabla SEXO tiene por DEFAULT M, y los valores admitidos son F y
M
o En la tabla PROMOCION, la FECHA_FIN puede estar nula, pero si tiene valor, debe ser mayor a la
FECHA_INICIO.
o El atributo GENERAL puede tener los valores S y N. Si tiene S, el ID_LOCALIDAD debe estar
nulo. En cambio si tiene N (No es una promocin general), el ID_LOCALIDAD debe estar asignado
- Debe incorporar el atributo ID_PROMOCION a la tabla B_DETALLE_VENTAS con referencia a la tabla
PROMOCION
CREATE TABLE CONTACTOS (
ID
CEDULA
NOMBRE
APELLIDO
FECHA_NACIMIENTO
TELEFONO_DE_CONTACTO
DIRECCION_DE_CORREO
COMENTARIOS
SEXO

NUMBER(8) NOT NULL,


VARCHAR2(15) NULL,
VARCHAR2(40) NOT NULL,
VARCHAR2(40) NOT NULL,
DATE DEFAULT SYSDATE NULL,
VARCHAR2(40) NOT NULL,
VARCHAR2(100) NOT NULL,
VARCHAR2(500) NOT NULL,
VARCHAR2(40) DEFAULT 'F' NOT NULL
CONSTRAINT CH_SEXO CHECK (SEXO IN ('F', 'M')),
CONSTRAINT PKCONTACTOS PRIMARY KEY (ID));

CREATE TABLE PROMOCIONES (


NOMBRE_PROMOCIN
FECHA_INICIO
FECHA_FIN
ID_LOCALIDAD
ID
GENERAL

VARCHAR2(500) NOT NULL,


DATE DEFAULT SYSDATE NOT NULL,
DATE NULL,
NUMBER(8) NULL,
NUMBER(4) NOT NULL,
VARCHAR2(1) DEFAULT 'S' NOT NULL
CONSTRAINT CK_GRAL_SI_NO CHECK (GENERAL IN ('S', 'N')),
CONSTRAINT PKPROMOCIONES PRIMARY KEY (ID),
CONSTRAINT CH_FECHA_PROMO CHECK ((FECHA_FIN IS NULL) OR (FECHA_FIN >
FECHA_INICIO)),
CONSTRAINT CK_GRAL_LOC CHECK ((GENERAL = 'S' AND ID_LOCALIDAD IS NULL) OR (GENERAL
= 'N' AND ID_LOCALIDAD IS NOT NULL)));
CREATE TABLE PROMOCION_ARTICULO (
ID_PROMO
NUMBER(4) NOT NULL,
ID_ARTICULO
NUMBER(8) NOT NULL,
DESCUENTO_PROMOCION NUMBER(2) DEFAULT 0 NOT NULL,
CONSTRAINT PKPROMOCION_ARTICULO PRIMARY KEY (ID_PROMO, ID_ARTICULO));

CIENCIAS
Carrera
PRIMER PARCIAL
Examen
Profesora: Carmen N. Martnez W.
Asistente: Diana Ferreira

Asignatura:
Secciones
Nombre
Alumno

BASE DE DATOS 2
NA - NB

FECHA
16/04/2013

20
25
25
10
80

Tema1
Tema2
Tema3
Tema4
TOTAL

ALTER TABLE PROMOCION_ARTICULO


ADD ( CONSTRAINT R_ARTICULO_PROMO
FOREIGN KEY (ID_ARTICULO)
REFERENCES B_ARTICULOS ) ;
ALTER TABLE PROMOCION_ARTICULO
ADD ( CONSTRAINT R_PROMO_ARTICULO
FOREIGN KEY (ID_PROMO)
REFERENCES PROMOCIONES ) ;
ALTER TABLE PROMOCIONES
ADD ( CONSTRAINT R_LOCALIDAD_PROMOCION
FOREIGN KEY (ID_LOCALIDAD)
REFERENCES B_LOCALIDAD ) ;
ALTER TABLE B_DETALLE_VENTAS
ADD (ID_PROMOCION NUMBER(4) CONSTRAINT FK_PROMO_VENTAS REFERENCES PROMOCIONES(ID));

TEMA 2:
Utilice la tabla CONTACTOS, capturada desde la pgina WEB, para actualizar los datos de los clientes. Para el efecto,
utilice una operacin MERGE (por nmero de cdula):
- Si la persona ya EXISTE, actualice en la tabla B_PERSONAS los siguientes datos a partir de la tabla
CONTACTOS: Nombre, Apellido, fecha de nacimiento, telfono y direccin de correo.
- Si la CDULA no EXISTE, inserte un nuevo cliente. Recuerde que el id de persona debe obtenerla sumando 1 al
ltimo ID de la tabla b_personas. Adems debe asignar las columnas para las que no tiene correspondencia, con
un valor por DEFAULT. Estas son: ES_CLIENTE =S, ES_PROVEEDOR=N, TIPO_PERSONA = F, la
direccin no asignada, y las dems columnas van en NULO.
MERGE INTO b_personas p
USING contactos c
ON (p.cedula = c.cedula)
WHEN MATCHED THEN
UPDATE SET p.nombre = c.nombre,
p.apellido = c.apellido,
p.fecha_nacimiento = c.fecha_nacimiento,
p.telefono = c.telefono_de_contacto,
p.correo_electronico = c.direccion_de_correo
WHEN NOT MATCHED THEN
INSERT (p.id, p.tipo_persona, p.nombre, p.apellido, p.direccion, p.telefono, p.cedula,
p.correo_electronico, p.es_cliente, p.es_proveedor, p.fecha_nacimiento)
VALUES (NVL((SELECT MAX(ID) FROM B_PERSONAS),0) +1, 'F', c.nombre, c.apellido, 'N/A',
c.telefono_de_contacto, c.cedula, c.direccion_de_correo, 'S','N',
c.fecha_nacimiento);

TEMA 3:
El administrador necesita determinar si los vendedores aplicaron correctamente la promocin. Para ello prepare la vista
materializada V_CONTROL_PROMOCIONES que deber tener los siguientes atributos slo si el precio en la tabla
b_articulos el porcentaje de la promocin es INFERIOR al precio aplicado en la tabla detalle_ventas. Se propone las
columnas que deben aparecer y un ejemplo
Nombre Artculo

Fecha
Venta

Nombre
Vendedor

Juego de Ollas
27/03/2013 Eva
Tramontinax5pz
Gonzlez

Nombre
promocin

Sper promo
PASCUAS

Precio
artculo

Precio
Promocin

Precio aplicado en
la venta

499.091

399.273

350.000

(es el precio
del artculo
en la tabla
b_artculos)

(precio precio
* el porcentaje
del descuento de
la promocin.
En el ejemplo
20%)

(el
precio
aplicado en la
tabla
b_ventas_detalle))

CIENCIAS
Carrera
PRIMER PARCIAL
Examen
Profesora: Carmen N. Martnez W.
Asistente: Diana Ferreira

Asignatura:
Secciones
Nombre
Alumno

BASE DE DATOS 2
NA - NB

FECHA
16/04/2013

Tema1
Tema2
Tema3
Tema4
TOTAL

20
25
25
10
80

La vista se crear inmediatamente y slo se refrescar por demanda.


CREATE
MATERIALIZED VIEW v_control_promociones
BUILD IMMEDIATE
REFRESH COMPLETE ON DEMAND
AS
SELECT a.nombre nombre_articulo, v.fecha fecha_venta, e.nombre||' '|| e.apellido
nombre_vendedor,
p.nombre_promocin nombre_promocion, a.precio precio_articulo,
ROUND(a.precio - (a.precio *pa.descuento_promocion/100)) precio_promocion,
d.precio
FROM
b_detalle_ventas d JOIN b_ventas v
ON d.id_venta = v.id
JOIN b_empleados e
ON e.cedula = v.cedula_vendedor
JOIN b_articulos a
ON d.id_articulo = a.id
JOIN promocion_articulo pa
on pa.id_promo = d.id_promocion
and pa.id_articulo = d.id_articulo
JOIN promociones p
ON p.id = pa.id_promo
WHERE d.precio < ROUND(a.precio - (a.precio *pa.descuento_promocion/100));

TEMA 4:
- Cree el ROLE R_VISITANTE asignndole una contrasea. Asigne al role R_VISITANTE, el permiso para
consultar la tabla B_LOCALIDAD, y para insertar en la tabla CONTACTOS
- Cree el usuario VISITANTE asignndole el tablespace BASEDATOS2 con cuota ilimitada. Permtale conectarse
- Concdale el permiso a conectarse, y el role R_VISITANTE.
CREATE ROLE r_visitante IDENTIFIED BY visitas2013;
CREATE USER visitante IDENTIFIED BY visitante
DEFAULT TABLESPACE BASEDATOS2
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED
ON BASEDATOS2;
GRANT
GRANT
GRANT
GRANT

CREATE SESSION TO visitante;


INSERT ON CONTACTOS to r_visitante;
SELECT ON B_LOCALIDAD
to r_visitante;
r_visitante to visitante;

You might also like