Вы находитесь на странице: 1из 4

PRACTICA CALIFICADA DE ORGANIZACIN Y ADMINISTRACION DE BASES DE

DATOS
Cdigo
Apellidos y Nombres
Fecha
Nota
010200865d
Romero Chalco Juan Carlos
19/03/2015
Crear la BD dboFerreteria y hacer correr el siguiente script SQL. (Debe modificar las tablas
que requieran actualizaciones en cascada)
CREATE DATABASE BDdboFerreteria
GO
USE BDdboFerreteria
GO
CREATE TABLE cliente
(
CodCliente CHAR(4) PRIMARY KEY,
nomCliente CHAR(30),
fechaNacimientoCliente DATETIME,
)
CREATE TABLE producto
(
codProducto CHAR(4) PRIMARY KEY,
nomProducto CHAR(40),
descripcionProducto CHAR(40),
precioProducto MONEY,
stock int not null
)
CREATE TABLE recibo
(
numRecibo CHAR(5) PRIMARY KEY,
fechaRecibo DATETIME,
CodCliente CHAR(4),
FOREIGN KEY (CodCliente) REFERENCES cliente
ON UPDATE CASCADE,
)
CREATE TABLE lineaDeRecibo
(
numLineaDeRecibo INT PRIMARY KEY,
cantidad DECIMAL(10,2),
codProducto CHAR(4),
numRecibo CHAR(5),
FOREIGN KEY (codProducto) REFERENCES producto,
FOREIGN KEY (numRecibo) REFERENCES recibo
ON UPDATE CASCADE
)
--INSERTAR REGISTROS.
INSERT INTO cliente
VALUES('0001','PREZ, JOS','10/04/1960')
INSERT INTO cliente
VALUES('0002','TORRES, RINA','25/12/1963')
INSERT INTO cliente
VALUES('0003','SALAS, ROSA','10/04/1959')
INSERT INTO cliente
VALUES('0004','GAMARRA, OLIVER','08/12/1982')
INSERT INTO cliente
VALUES('0005','ROMERO, ALICIA','24/12/1981')
INSERT INTO cliente
VALUES('0006','ROJAS, JOAQUN','26/11/1980')
INSERT INTO cliente
VALUES('0007','RICALDE, REBECA','04/04/1985')

INSERT INTO producto


VALUES('P001','FIERRO 3/4','BARRA',20.00,100)
INSERT INTO producto
VALUES('P002','FIERRO 1/2','BARRA',12.00,500)
INSERT INTO producto
VALUES('P003','LAVATORIO TREBOL CLASICO BLANCO','UNIDAD',200.00,20)
INSERT INTO producto
VALUES('P004','CERROJO FORTE TRIPLE SEGURO','UNIDAD',54.00,50)
INSERT INTO producto
VALUES('P005','CERROJO FORTE SIMPLE','UNIDAD',38.50,150)
INSERT INTO producto
VALUES('P006','MAYOLICA CELIMA 20X15 BLANCA','METRO CUADRADO',20.00,45)
INSERT INTO producto
VALUES('P007','MAYOLICA CELIMA 35X20 COLOR','METRO CUADRADO',30.00,60)
INSERT INTO producto
VALUES('P008','BAERA LOZA COLOR','UNIDAD',500.00,10)
INSERT INTO producto
VALUES('P009','BAERA LOZA BLANCA','UNIDAD',300.00,15)
INSERT INTO producto
VALUES('P010','BAERA LOZA BLANCA MARCA XYZ','UNIDAD',300.00,17)

INSERT INTO recibo


VALUES('R0001','25/07/2002','0001')
INSERT INTO recibo
VALUES('R0002','26/07/2002','0001')
INSERT INTO recibo
VALUES('R0003','26/07/2002','0002')
INSERT INTO recibo
VALUES('R0004','27/07/2002','0003')
INSERT INTO recibo
VALUES('R0005','27/07/2002','0004')
INSERT INTO recibo
VALUES('R0006','27/07/2002','0005')
INSERT INTO recibo
VALUES('R0007','28/07/2002','0001')
INSERT INTO lineaDeRecibo
VALUES(1,5,'P001','R0001')
INSERT INTO lineaDeRecibo
VALUES(2,10,'P002','R0001')
INSERT INTO lineaDeRecibo
VALUES(3,1,'P003','R0002')
INSERT INTO lineaDeRecibo
VALUES(4,12,'P002','R0003')
INSERT INTO lineaDeRecibo
VALUES(5,1,'P003','R0003')
INSERT INTO lineaDeRecibo
VALUES(6,7,'P006','R0004')
INSERT INTO lineaDeRecibo
VALUES(7,1,'P005','R0005')
INSERT INTO lineaDeRecibo
VALUES(8,1,'P004','R0006')
INSERT INTO lineaDeRecibo
VALUES(9,1,'P003','R0007')

--2.1.Desarrollar una vista que muestre el nombre del cliente, numero recibo,

--la fecha del recibo, el cdigo del producto, el nombre del producto, descripcin del
producto,
-- precio del producto, stock y la cantidad vendida del producto. 2p
GO
CREATE VIEW REPORTE_CLIENTE
AS
SELECT c.nomCliente, r.numRecibo, r.fechaRecibo, l.codProducto,
p.descripcionProducto, p.precioProducto, p.stock, l.cantidad
FROM cliente c
INNER JOIN recibo r on c.CodCliente = r.CodCliente
INNER JOIN lineaDeRecibo l on l.numRecibo = r.numRecibo
INNER JOIN producto p on l.codProducto = p.codProducto
GO
SELECT * FROM REPORTE_CLIENTE;
--2.2.Por medio de la vista muestre la total pagado por recibo. 3p
GO
CREATE VIEW TOTAL_RECIBO
AS
SELECT l.numRecibo ,SUM(l.cantidad) AS Total
FROM lineaDeRecibo l
GROUP BY l.numRecibo
GO
SELECT * FROM TOTAL_RECIBO;
--2.3.Por medio de la vista ingresar registros a la tabla Producto. 2p
CREATE VIEW ADD_PRODUCTO
AS
SELECT codProducto, nomProducto, descripcionProducto, precioProducto, stock
FROM producto
GO
INSERT INTO ADD_PRODUCTO (codProducto, nomProducto, descripcionProducto,
precioProducto, stock )
VALUES ('P025','PRODUCTO1','UNIDAD',500.00,7)
GO
SELECT * FROM producto;
--2.4.
Por medio de la vista mostrar a los nombres de los clientes que
compraron ms de una vez en la Tienda. 3p
GO
CREATE VIEW COMPRA_MAS_UNO
AS
SELECT COUNT(r.numRecibo) AS Compras, r.CodCliente AS Cliente FROM recibo r
GROUP BY r.CodCliente
HAVING (COUNT(r.numRecibo) > 1)
GO
SELECT * FROM COMPRA_MAS_UNO
GO
--2.5.
Crear una funcin que permita determinar la edad de los clientes, al
momento de hacer una compra. 3p
CREATE FUNCTION FUNCION_EDAD
(@fecha VARCHAR(20))
RETURNS VARCHAR(20)
AS
BEGIN
DECLARE @nombre varchar(20)
SET @nombre=
2015-datename(year,@fecha)
RETURN @nombre;
END;
---SELECT dbo.FUNCION_EDAD(p.fechaRecibo)AS EDAD_CLIENTES,c.nomCliente AS
NOMBRE_CLIENTE
FROM cliente c
INNER JOIN recibo p

ON c.CodCliente=p.CodCliente;
--2.6.
Desarrollar una consulta que me permita mostrar los datos del cliente, su
edad actual y la edad que tena cuando
---realizo una compra por medio de la funcin. 2p
SELECT c.nomCliente,2015-year(c.fechaNacimientoCliente)AS EDAD_ACTUAL,
dbo.FUNCION_EDAD(p.fechaRecibo) AS EDAD_COMPRA
FROM cliente c
INNER JOIN recibo p ON c.CodCliente=p.CodCliente;
--2.7.
Desarrollar un disparador que me permita controlar el stock de los
productos, teniendo en consideracin que en
---ningn caso los productos pueden llegar a tener menos de 7 unidades en su stock.
5p
create trigger STOCK_PRODUCTOS
ON lineaDeRecibo
FOR
INSERT
AS
DECLARE @stock int
SELECT @stock= stock FROM producto
JOIN inserted
ON inserted.codProducto=producto.codProducto WHERE
producto.codProducto=inserted.codProducto
IF (@stock>=(SELECT cantidad FROM inserted)OR @stock>=7)
update producto SET stock=stock-inserted.cantidad
FROM producto
JOIN inserted
ON inserted.codProducto=producto.codProducto WHERE
producto.codProducto=inserted.codProducto
ELSE
BEGIN
RAISERROR ('ESCASOS PRODUCTOS EN STOCK', 16, 1)
ROLLBACK TRANSACTION
end
INSERT INTO lineaDeRecibo VALUES(15,8000,'P001','R0007')
SELECT * FROM lineaDeRecibo;

Вам также может понравиться