Base de Datos de Ferretería Con Scripts
Base de Datos de Ferretería Con Scripts
Base de Datos de Ferretería Con Scripts
Proyecto 2
Quetzaltenango, Quetzaltenango
04 de Noviembre de 2016
INTRODUCCION
El presente informe tiene como fin dar a conocer los
procesos realizados en el desarrollo del segundo
proyecto en el curso de bases de datos 1, como
tambin el anlisis del mismo, dicho proyecto fue
estructurado e implementado en cdigo SQL y PLSQL,
utilizando como SGDB a ORACLE en su versin 12C,
usando la herramienta SQL DEVELOPER para el
desarrollo del lenguaje SQL, creando objetos, como
usuario, tablas, procedimientos, ndices, vistas y
principalmente el PACKAGE, as mismo se ha utilizado
la herramienta SQL DEVELOPER DATA MODELER, para
realizar los diagramas entidad relacin de cada base
de datos, en esta ocasin se cre una BD enfocada a
una FERRETERIA aplicando las 3 formas normales para
as tener un buen diseo de dicha BD, pido que este
documento sea detenidamente analizado para su
mejor comprensin.
Para la insercin de los distintos datos para las tablas ya antes mencionadas se utilizaron
los procedimientos para la facilitacin de dichas inserciones.
Para facilitar las consultas se implementaron las vistas, se crearon 3 vistas gerenciales
enfocndose en la informacin ms requerida por parte del dueo de dicha ferretera.
Continuando con las consultas tambin se implementaron los ndices para mejorar el
tiempo de bsqueda al ejecutar una Query.
DIAGRAMA ER
Ptelefono number,
Pcod_pago number
)
IS
BEGIN
INSERT INTO
PROVEEDOR(cod_proveedor,nombre_proveedor,direccion_proveedor,telefono_proveedor,c
od_pago)
VALUES (Pcod_proveedor,Pnombre,Pdireccion,Ptelefono,Pcod_pago);
DBMS_OUTPUT.PUT_LINE('Proveedor Insertado: '||pcod_proveedor|| ' ' ||pnombre|| ' ' ||
pdireccion|| ' ' ||ptelefono|| ' ' ||pcod_pago);
END;
CREATE OR REPLACE PROCEDURE DatosArticulo(Pcod_articulo number,
Pnombre varchar2,
Pcolor varchar2,
Pmedidas varchar2,
Pprecio_u number,
Pexistencia number,
Pcod_proveedor number
)
IS
BEGIN
INSERT INTO
ARTICULO(cod_articulo,nombre_articulo,color_articulo,medidas_articulo,precio_u_articulo,
existencia_articulo,cod_proveedor)
VALUES (Pcod_articulo,Pnombre,Pcolor,Pmedidas,Pprecio_u,Pexistencia,Pcod_proveedor);
DBMS_OUTPUT.PUT_LINE('Artculo Insertado: '||pcod_articulo|| ' ' ||pnombre|| ' ' ||pcolor|| '
' ||pmedidas|| ' ' ||pprecio_u||
' ' ||pexistencia|| ' ' ||pcod_proveedor);
END;
CREATE OR REPLACE PROCEDURE DatosRecepcion(Pcod_recepcion number,
Pfecha_recepcion date,
Pcod_articulo number,
Pcod_proveedor number
)
IS
BEGIN
INSERT INTO R_ARTICULO(cod_recepcion,fecha_recepcion,cod_articulo,cod_proveedor)
VALUES (Pcod_recepcion,Pfecha_recepcion,Pcod_articulo,Pcod_proveedor);
DBMS_OUTPUT.PUT_LINE('Envio Insertado: '||pcod_recepcion|| ' ' ||pfecha_recepcion|| ' ' ||
pcod_articulo|| ' ' ||pcod_proveedor);
END;
CREATE OR REPLACE PROCEDURE DatosFactura(Pnum_factura number,
Pfecha date,
Pnit_cliente number,
Pcod_pago number
)
IS
BEGIN
INSERT INTO FACTURA(num_factura,fecha_emision,nit_cliente,cod_pago)
VALUES (Pnum_factura,Pfecha,Pnit_cliente,Pcod_pago);
DBMS_OUTPUT.PUT_LINE('Factura Insertada: '||pnum_factura|| ' ' ||pfecha|| ' ' ||
pnit_cliente|| ' ' ||pcod_pago);
END;
CREATE OR REPLACE PROCEDURE DatosD_Factura(Pnum_detalle number,
Pnum_factura number,
Pcod_articulo number,
Pcantidad number,
Pprecio_unidad number,
Pprecio_total number
)
IS
BEGIN
INSERT INTO
D_FACTURA(num_detalle,num_factura,cod_articulo,cantidad,precio_unidad,precio_total)
VALUES
(Pnum_detalle,Pnum_factura,Pcod_articulo,Pcantidad,Pprecio_unidad,Pprecio_total);
UPDATE D_FACTURA SET precio_total=cantidad*precio_unidad WHERE precio_total=0;
DBMS_OUTPUT.PUT_LINE('Detalle de Factura Insertado: '||pnum_detalle||' '||
pnum_factura|| ' ' ||pcod_articulo
|| ' ' ||pcantidad|| ' ' ||pprecio_unidad|| ' ' ||pprecio_total);
END;
CREATE OR REPLACE PROCEDURE DatosEntrega(Pnum_entrega number,
Pfecha date,
Pnit_cliente number,
Pnum_factura number
)
IS
BEGIN
INSERT INTO ENTREGA_CLIENTE(num_entrega,fecha_entrega,nit_cliente,num_factura)
VALUES (Pnum_entrega,Pfecha,Pnit_cliente,Pnum_factura);
DBMS_OUTPUT.PUT_LINE('Entrega Insertada: '||pnum_entrega|| ' ' ||pfecha|| ' ' ||
pnit_cliente|| ' ' ||pnum_factura);
END;
INSERCION DE DATOS EN PROCEDIMIENTOS
SET SERVEROUTPUT ON;
BEGIN
DatosCliente('12345678','Bernab','Chavajay','Santa Mara Visitacin,Solol','49381201');
DatosCliente('87654321','Francisco','Chavajay','Santa Mara
Visitacin,Solol','59441383');
DatosCliente('55555555','Cecilia','Chavajay','Santa Mara Visitacin,Solol','11111111');
DatosCliente('66666666','Ismael','Chavajay','Santa Mara Visitacin,Solol','22222222');
DatosCliente('77777777','Patricia','Chavajay','Santa Mara Visitacin,Solol','33333333');
END;
BEGIN
DatosPago('1','Efectivo');
DatosPago('2','Cheque');
DatosPago('3','Tarjeta Crdito');
DatosPago('4','Tarjeta Dbito');
END;
BEGIN
DatosProveedor('1','Ferre S.A.','Guatemala, Guatemala','12345678','2');
DatosProveedor('2','Ferreteria Comercial Pacifico S.A.','Guatemala,
Guatemala','87654321','1');
DatosProveedor('3','Ferreteria rex','Guatemala, Guatemala','44444444','1');
DatosProveedor('4','Ferretera la sexta','Chiquimula, Guatemala','11111111','1');
DatosProveedor('5','Ferretera la sexta, S.A.','Guatemala, Guatemala','22222222','1');
END;
BEGIN
DatosArticulo('1','Desarmador punta estrella','Negro','Sin Medida','20.50','30','1');
DatosArticulo('2','Desarmador 10 en 1','Rojo','Sin Medida','210.50','40','2');
DatosArticulo('3','Broca para pared','Plateado','1/4','14.75','20','1');
DatosArticulo('4','Broca para madera','Gris','1/2','34.75','20','3');
DatosArticulo('5','Broca para madera','Gris','1/4','24.75','20','3');
END;
BEGIN
DatosRecepcion('1','17/10/2016','1','1');
DatosRecepcion('2','17/10/2016','2','2');
DatosRecepcion('3','18/10/2016','3','1');
DatosRecepcion('4','19/10/2016','4','3');
DatosRecepcion('5','20/10/2016','5','3');
END;
BEGIN
DatosFactura('1','19/10/2016','12345678','1');
DatosFactura('2','20/10/2016','87654321','3');
DatosFactura('3','21/10/2016','55555555','1');
DatosFactura('4','22/10/2016','66666666','1');
DatosFactura('5','23/10/2016','77777777','1');
END;
BEGIN
DatosD_Factura('1','1','1','3','20.50','0');
DatosD_Factura('2','1','2','5','210.50','0');
DatosD_Factura('3','2','3','3','14.75','0');
DatosD_Factura('4','2','4','3','34.75','0');
DatosD_Factura('5','3','5','3','24.75','0');
DatosD_Factura('6','3','1','4','20.5','0');
DatosD_Factura('7','4','2','3','210.50','0');
DatosD_Factura('8','5','2','2','210.50','0');
END;
BEGIN
DatosEntrega('1','22/10/2016','12345678','1');
DatosEntrega('2','23/10/2016','87654321','2');
DatosEntrega('3','24/10/2016','55555555','3');
DatosEntrega('4','25/10/2016','66666666','4');
DatosEntrega('5','26/10/2016','77777777','5');
END;
);
SELECT * FROM VW_ENTREGA;
CREATE OR REPLACE VIEW VW_PRODUCTOS
AS
(
SELECT
art.cod_articulo,art.nombre_articulo,art.precio_u_articulo,art.existencia_articulo,pro.cod_p
roveedor,
pro.nombre_proveedor,pro.direccion_proveedor,pro.telefono_proveedor,pag.forma_pago
FROM ARTICULO art,PROVEEDOR pro, PAGO pag
WHERE art.cod_proveedor = pro.cod_proveedor and pro.cod_pago = pag.cod_pago
);
SELECT * FROM VW_PRODUCTOS;
INDICES
CREATE INDEX IND_CLIENTE ON CLIENTE
(
nit, nombre_cliente, apellido_cliente, direccion_cliente, telefono_cliente
);
select * from all_indexes where table_name = 'CLIENTE';
CREATE INDEX IND_PAGO ON PAGO
(
cod_pago, forma_pago
);
CREATE INDEX IND_PROVEEDOR ON PROVEEDOR
(
cod_proveedor,nombre_proveedor,direccion_proveedor,telefono_proveedor,cod_pago
);
CREATE INDEX IND_ARTICULO ON ARTICULO
(
cod_articulo,nombre_articulo,color_articulo,medidas_articulo,precio_u_articulo,existencia_
articulo,cod_proveedor
);
CREATE INDEX IND_RECEPCION ON R_ARTICULO
(
cod_recepcion,fecha_recepcion,cod_articulo,cod_proveedor
);
CREATE INDEX IND_DETALLE ON D_FACTURA
(
num_detalle,num_factura,cod_articulo,cantidad,precio_unidad,precio_total
);
CREATE INDEX IND_FACTURA ON FACTURA
(
num_factura,fecha_emision,nit_cliente,cod_pago
);
CREATE INDEX IND_ENTREGA ON ENTREGA_CLIENTE
(
num_entrega,fecha_entrega,nit_cliente,num_factura
);
CREACION DE PACKAGE OPERACIONES_FERRETERIA
------CREACION DE PACKAGE OPERACIONES_FERRETERIA----------------CREATE OR REPLACE PACKAGE OPERACIONES_FERRETERIA
AS
PROCEDURE DatosCliente(Pnit_cliente number,
Pnombre varchar2,
Papellido varchar2,
Pdireccion varchar2,
Ptelefono number);
PROCEDURE DatosPago(Pcod_pago number,
Pforma_pago varchar2
);
PROCEDURE DatosProveedor(Pcod_proveedor number,
Pnombre varchar2,
Pdireccion varchar2,
Ptelefono number,
Pcod_pago number
);
PROCEDURE DatosArticulo(Pcod_articulo number,
Pnombre varchar2,
Pcolor varchar2,
Pmedidas varchar2,
Pprecio_u number,
Pexistencia number,
Pcod_proveedor number
);
PROCEDURE DatosRecepcion(Pcod_recepcion number,
Pfecha_recepcion date,
Pcod_articulo number,
Pcod_proveedor number
);
PROCEDURE DatosFactura(Pnum_factura number,
Pfecha date,
Pnit_cliente number,
Pcod_pago number
);
PROCEDURE DatosD_Factura(Pnum_detalle number,
Pnum_factura number,
Pcod_articulo number,
Pcantidad number,
Pprecio_unidad number,
Pprecio_total number
);
PROCEDURE DatosEntrega(Pnum_entrega number,
Pfecha date,
Pnit_cliente number,
Pnum_factura number
);
END OPERACIONES_FERRETERIA;
--------CREACION CUERPO DEL PACKAGE OPERACIONES_FERRETERIA----------CREATE OR REPLACE PACKAGE BODY OPERACIONES_FERRETERIA
AS
PROCEDURE DatosCliente(Pnit_cliente number,
Pnombre varchar2,
Papellido varchar2,
Pdireccion varchar2,
Ptelefono number)
IS
BEGIN
INSERT INTO CLIENTE (nit,
nombre_cliente,apellido_cliente,direccion_cliente,telefono_cliente)
VALUES (Pnit_cliente,Pnombre,Papellido,Pdireccion,Ptelefono);
DBMS_OUTPUT.PUT_LINE('Insertado Cliente: '||pnit_cliente|| ' ' ||pnombre|| ' ' ||papellido|| '
' ||pdireccion|| ' ' ||ptelefono);
END DatosCliente;
PROCEDURE DatosPago(Pcod_pago number,
Pforma_pago varchar2
)
IS
BEGIN
INSERT INTO PAGO (cod_pago,forma_pago)
VALUES (Pcod_pago,Pforma_pago);
DBMS_OUTPUT.PUT_LINE('Insertado Pago: '||Pcod_pago|| ' ' ||Pforma_pago);
END DatosPago;
PROCEDURE DatosProveedor(Pcod_proveedor number,
Pnombre varchar2,
Pdireccion varchar2,
Ptelefono number,
Pcod_pago number
)
IS
BEGIN
INSERT INTO
PROVEEDOR(cod_proveedor,nombre_proveedor,direccion_proveedor,telefono_proveedor,c
od_pago)
VALUES (Pcod_proveedor,Pnombre,Pdireccion,Ptelefono,Pcod_pago);
DBMS_OUTPUT.PUT_LINE('Proveedor Insertado: '||pcod_proveedor|| ' ' ||pnombre|| ' ' ||
pdireccion|| ' ' ||ptelefono|| ' ' ||pcod_pago);
END DatosProveedor;
IS
BEGIN
INSERT INTO
D_FACTURA(num_detalle,num_factura,cod_articulo,cantidad,precio_unidad,precio_total)
VALUES
(Pnum_detalle,Pnum_factura,Pcod_articulo,Pcantidad,Pprecio_unidad,Pprecio_total);
UPDATE D_FACTURA SET precio_total=cantidad*precio_unidad WHERE precio_total=0;
DBMS_OUTPUT.PUT_LINE('Detalle de Factura Insertado: '||pnum_detalle||' '||
pnum_factura|| ' ' ||pcod_articulo
|| ' ' ||pcantidad|| ' ' ||pprecio_unidad|| ' ' ||pprecio_total);
END DatosD_Factura;
PROCEDURE DatosEntrega(Pnum_entrega number,
Pfecha date,
Pnit_cliente number,
Pnum_factura number
)
IS
BEGIN
INSERT INTO ENTREGA_CLIENTE(num_entrega,fecha_entrega,nit_cliente,num_factura)
VALUES (Pnum_entrega,Pfecha,Pnit_cliente,Pnum_factura);
DBMS_OUTPUT.PUT_LINE('Entrega Insertada: '||pnum_entrega|| ' ' ||pfecha|| ' ' ||
pnit_cliente|| ' ' ||pnum_factura);
END DatosEntrega;
END OPERACIONES_FERRETERIA;
EJECUTANDO PACKAGE OPERACIONES_FERRETERIA
EXECUTE
OPERACIONES_FERRETERIA.DatosCliente('88888888','Prueba1','Prueba1','Prueba1','99999
999');
select * from cliente;
CONCLUSIONES
Es muy importante conocer los conceptos bsicos
de SQL.
El diagrama ER es fundamental para comprender
la estructura bsica de una BD, por lo que su buen
modelado, nos ayudar grandemente en el trabajo
de DBA.
La utilizacin de VISTAS es fundamental para
realizar querys ms solicitadas de una BD y as en
lugar de escribir y ejecutar la misma query varias
veces se ejecuta la VISTA.
El package es fundamental para almacenar todas
operaciones implementadas en el diseo de la BD
y as se podr utilizar en cualquier momento
haciendo uso del comando EXECUTE quedando la
sintaxis
de
la
siguiente
manera
EXECUTE_NOMBREPACKAGE.NOMBRE OPERACION
La prctica constante mejora las habilidades en
BD por lo que es importante buscar nueva
informacin acerca del tema, para ser un buen
DBA.
RECOMENDACIONES
Practica
constante
adquiridos.
de
los
conocimientos