Académique Documents
Professionnel Documents
Culture Documents
INDICE
INDICE
ALCANCE
MODELO DE DATOS
MODELO LOGICO
MODELO FISICO
10
CONSTRUCCION
11
CAPA DE ALMACENAMIENTO
11
SCRIPT PUNTOS
11
CAPA LOGICA
21
PROCEDIMIENTOS Y PRUEBAS
21
TRIGGERS
61
LOG
64
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
Paso
1
2
3
4
5
6
7
8
3
3.1
3.2
3.3
3.4
INGENIEROS ASOCIADOS
<<INCLUDE>>
ACTUALIZAR PUNTOS
VALIDAR FECHA
FUNCIONARIO
INGENIEROS ASOCIADOS
CASO DE USO 3
<<INCLUDE>>
CAMBIAR Y ACTUALIZAR PUNTOS
VERIFICAR CLIENTE
FUNCIONARIO
<<EXTEND>>
ARTICULO NO CANJEABLE
Paso
1
2
3
4
5
6
7
8
9
10
11
3.1
3.2
3.3
7.1
7.2
7.3
7.4
INGENIEROS ASOCIADOS
7.5
7.6
7.7
4. Catlogo de puntos
El sistema generar cada mes un catlogo de puntos. El catlogo se clasificar
por tipos de artculos, Ej lcteos, bebidas refrescantes, granos, panes, etc. Por
cada tipo se describirn los artculos con su nombre, referencia, puntos y valor de
venta.
CASO DE USO 4
<<INCLUDE>>
GENERAR CATALOGO
FUNCIONARIO
<<EXTEND>>
Paso
1
2
3
4
5
6
7
8
9
3.1
INGENIEROS ASOCIADOS
3.2
3.3
6.1
6.2
6.3
CASO DE USO 5
<<EXTEND>>
GENERAR INFORME
FUNCIONARIO
Paso
1
2
3
4
5
6
3.1
3.2
3.3
5.1
5.2
5.3
INGENIEROS ASOCIADOS
MODELO DE DATOS
catalogo
num_catalogo <pi> Number (5) <M>
mes_catalogo
Date
<M>
ao_catalogo
<Undefined> <M>
Relationship_1
tipo_articulo
catalogo_tipoarticulo
ind_catalogo <pi> Number (2) <M>
Relationship_4
Relationship_6
Relationship_5
id_cliente
<pi> Number (15)
<M>
nom_cliente
Variable characters (50) <M>
dir_cliente
Variable characters (50) <M>
email_cliente
Variable characters (30)
acum_ptos
Number (5)
Identifier_1
<pi>
...
Relationship_7
articulo
articulo_puntos-catalogo
item_ptos <pi> Number (2) <M>
ptos_art
<Undefined> <M>
Relationship_3
cod_art
<pi> Number (5)
<M>
nom_art
Characters (50) <M>
vr_compra
Number (10,2)
vr_venta
Number (10,2)
detalle_canje
Relationship_8
Identifier_1
<pi>
...
Relationship_11
detalle_venta
item_venta
<pi> Number (2)
canti
Number (3,2)
vr_item
Number (10,2)
est_det_venta
Variable characters (10)
Relationship_10
venta
num_venta <pi> Number (10) <M>
fecha_venta
Date
<M>
Relationship_9
INGENIEROS ASOCIADOS
MODELO LOGICO
catalogo
num_catalogo <pi> Number (5) <M>
mes_catalogo
Date
<M>
ao_catalogo
<Undefined> <M>
por
tipo_articulo
# cod_tipo Number (4)
* nom_tipo Characters (40)
catalogo_tipoarticulo
# num_catalogo Number (5)
# ind_catalogo Number (2)
* cod_tipo
Number (4)
seccion
canje
#
*
*
*
num_canje
id_cliente
mes_canje
ao_canje
Number (10)
Number (15)
Date
Date
clasificado
detalla
solicita
#
*
*
o
o
id_cliente
nom_cliente
dir_cliente
email_cliente
acum_ptos
cliente
Number (15)
Variable characters (50)
Variable characters (50)
Variable characters (30)
Number (5)
tiene
#
o
o
o
*
articulo_puntos-catalogo
item_ptos
Number (2)
cod_art
Number (5)
num_catalogo Number (5)
ind_catalogo Number (2)
ptos_art
<Undefined>
asignapuntos
articulo
# cod_art
Number (5)
* cod_tipo Number (4)
* nom_art
Characters (50)
o vr_compra Number (10,2)
o vr_venta Number (10,2)
contiene
#
*
*
*
*
detalle_canje
item_canje
Number (2)
num_canje
Number (10)
cod_art
Number (5)
cantidad
Number (3,2)
estado_canje Characters (1)
referenciado
detalle_venta
#
*
*
*
*
o
item_venta
num_venta
cod_art
canti
vr_item
est_det_venta
Number (2)
Number (10)
Number (5)
Number (3,2)
Number (10,2)
Variable characters (10)
venta
dividida
realiza
INGENIEROS ASOCIADOS
MODELO FISICO
catalogo
num_catalogo NUMBER(5) <pk>
mes_catalogo DATE
ao_catalogo <Undefined>
FK_CATALOGO_POR_CATALOGO
tipo_articulo
catalogo_tipoarticulo
num_catalogo NUMBER(5) <pk,fk1>
ind_catalogo NUMBER(2) <pk>
cod_tipo
NUMBER(4) <fk2>
FK_ARTICULO_DETALLA_CATALOGO
canje
num_canje
id_cliente
mes_canje
ao_canje
FK_ARTICULO_CLASIFICA_TIPO_ART
NUMBER(10) <pk>
id_cliente
NUMBER(15) <fk> FK_CANJE_SOLICITA_CLIENTE
nom_cliente
DATE
dir_cliente
DATE
email_cliente
acum_ptos
cliente
NUMBER(15)
<pk>
VARCHAR2(50)
VARCHAR2(50)
VARCHAR2(30)
NUMBER(5)
FK_DETALLE__TIENE_CANJE
articulo
articulo_puntos-catalogo
item_ptos
cod_art
num_catalogo
ind_catalogo
ptos_art
NUMBER(2)
NUMBER(5)
NUMBER(5)
NUMBER(2)
<Undefined>
cod_art
cod_tipo
<pk>
nom_art
<fk1>
vr_compra
<fk2>
vr_venta
FK_ARTICULO_ASIGNAPUN_ARTICULO
<fk2>
NUMBER(5)
<pk>
NUMBER(4)
<fk>
CHAR(50)
NUMBER(10,2)
NUMBER(10,2)
detalle_canje
FK_DETALLE__CONTIENE_ARTICULO
item_canje
num_canje
cod_art
cantidad
estado_canje
NUMBER(2) <pk>
NUMBER(10) <fk1>
NUMBER(5) <fk2>
NUMBER(3,2)
CHAR(1)
FK_DETALLE__REFERENCI_ARTICULO
detalle_venta
item_venta
num_venta
cod_art
canti
vr_item
est_det_venta
NUMBER(2)
<pk>
NUMBER(10)
<fk1>
NUMBER(5)
<fk2>
NUMBER(3,2)
NUMBER(10,2)
VARCHAR2(10)
venta
FK_DETALLE__DIVIDIDA_VENTA num_venta NUMBER(10) <pk>
id_cliente
NUMBER(15) <fk>
fecha_venta DATE
FK_VENTA_REALIZA_CLIENTE
INGENIEROS ASOCIADOS
CONSTRUCCION
CAPA DE ALMACENAMIENTO
SCRIPT PUNTOS
/*=============================================================
=*/
/* DBMS name:
ORACLE Version 11g
*/
/* Created on: 16/06/2013 07:36:22 a.m.
*/
/*=============================================================
=*/
/*=============================================================
=*/
/* Table: ARTICULO
*/
/*=============================================================
=*/
create table ARTICULO
(
COD_ART
NUMBER(5)
not null,
COD_TIPO
NUMBER(4)
not null,
NOM_ART
CHAR(50)
not null,
VR_COMPRA
NUMBER(10,2),
VR_VENTA
NUMBER(10,2),
constraint PK_ARTICULO primary key (COD_ART)
);
/*=============================================================
=*/
/* Index: CLASIFICADO_FK
*/
/*=============================================================
=*/
create index CLASIFICADO_FK on ARTICULO (
COD_TIPO ASC
);
/*=============================================================
=*/
/* Table: ARTICULO_PUNTOS_CATALOGO
*/
INGENIEROS ASOCIADOS
/*=============================================================
=*/
create table ARTICULO_PUNTOS_CATALOGO
(
ITEM_PTOS
NUMBER(2)
not null,
COD_ART
NUMBER(5),
NUM_CATALOGO
NUMBER(5),
IND_CATALOGO
NUMBER(2),
PTOS_ART
CHAR(10)
not null,
constraint PK_ARTICULO_PUNTOS_CATALOGO primary key (ITEM_PTOS)
);
/*=============================================================
=*/
/* Index: ASIGNAPUNTOS_FK
*/
/*=============================================================
=*/
create index ASIGNAPUNTOS_FK on ARTICULO_PUNTOS_CATALOGO (
COD_ART ASC
);
/*=============================================================
=*/
/* Index: DETALLA_FK
*/
/*=============================================================
=*/
create index DETALLA_FK on ARTICULO_PUNTOS_CATALOGO (
NUM_CATALOGO ASC,
IND_CATALOGO ASC
);
/*=============================================================
=*/
/* Table: CANJE
*/
/*=============================================================
=*/
create table CANJE
(
NUM_CANJE
NUMBER(10)
not null,
ID_CLIENTE
NUMBER(15)
not null,
MES_CANJE
DATE
not null,
ANO_CANJE
DATE
not null,
constraint PK_CANJE primary key (NUM_CANJE)
);
INGENIEROS ASOCIADOS
/*=============================================================
=*/
/* Index: SOLICITA_FK
*/
/*=============================================================
=*/
create index SOLICITA_FK on CANJE (
ID_CLIENTE ASC
);
/*=============================================================
=*/
/* Table: CATALOGO
*/
/*=============================================================
=*/
create table CATALOGO
(
NUM_CATALOGO
NUMBER(5)
not null,
MES_CATALOGO
DATE
not null,
ANO_CATALOGO
CHAR(10)
not null,
constraint PK_CATALOGO primary key (NUM_CATALOGO)
);
/*=============================================================
=*/
/* Table: CATALOGO_TIPOARTICULO
*/
/*=============================================================
=*/
create table CATALOGO_TIPOARTICULO
(
NUM_CATALOGO
NUMBER(5)
not null,
IND_CATALOGO
NUMBER(2)
not null,
COD_TIPO
NUMBER(4)
not null,
constraint PK_CATALOGO_TIPOARTICULO primary key (NUM_CATALOGO,
IND_CATALOGO)
);
/*=============================================================
=*/
/* Index: POR_FK
*/
/*=============================================================
=*/
create index POR_FK on CATALOGO_TIPOARTICULO (
NUM_CATALOGO ASC
);
INGENIEROS ASOCIADOS
/*=============================================================
=*/
/* Index: SECCION_FK
*/
/*=============================================================
=*/
create index SECCION_FK on CATALOGO_TIPOARTICULO (
COD_TIPO ASC
);
/*=============================================================
=*/
/* Table: CLIENTE
*/
/*=============================================================
=*/
create table CLIENTE
(
ID_CLIENTE
NUMBER(15)
not null,
NOM_CLIENTE
VARCHAR2(50)
not null,
DIR_CLIENTE
VARCHAR2(50)
not null,
EMAIL_CLIENTE
VARCHAR2(30),
ACUM_PTOS
NUMBER(5),
constraint PK_CLIENTE primary key (ID_CLIENTE)
);
/*=============================================================
=*/
/* Table: DETALLE_CANJE
*/
/*=============================================================
=*/
create table DETALLE_CANJE
(
ITEM_CANJE
NUMBER(2)
not null,
NUM_CANJE
NUMBER(10)
not null,
COD_ART
NUMBER(5)
not null,
CANTIDAD
NUMBER(3,2)
not null,
ESTADO_CANJE
CHAR(1)
not null,
constraint PK_DETALLE_CANJE primary key (ITEM_CANJE)
);
/*=============================================================
=*/
/* Index: TIENE_FK
*/
/*=============================================================
=*/
create index TIENE_FK on DETALLE_CANJE (
INGENIEROS ASOCIADOS
NUM_CANJE ASC
);
/*=============================================================
=*/
/* Index: CONTIENE_FK
*/
/*=============================================================
=*/
create index CONTIENE_FK on DETALLE_CANJE (
COD_ART ASC
);
/*=============================================================
=*/
/* Table: DETALLE_VENTA
*/
/*=============================================================
=*/
create table DETALLE_VENTA
(
ITEM_VENTA
NUMBER(2)
not null,
NUM_VENTA
NUMBER(10)
not null,
COD_ART
NUMBER(5)
not null,
CANTI
NUMBER(3,2)
not null,
VR_ITEM
NUMBER(10,2)
not null,
EST_DET_VENTA
VARCHAR2(10),
constraint PK_DETALLE_VENTA primary key (ITEM_VENTA)
);
/*=============================================================
=*/
/* Index: DIVIDIDA_FK
*/
/*=============================================================
=*/
create index DIVIDIDA_FK on DETALLE_VENTA (
NUM_VENTA ASC
);
/*=============================================================
=*/
/* Index: REFERENCIADO_FK
*/
/*=============================================================
=*/
create index REFERENCIADO_FK on DETALLE_VENTA (
COD_ART ASC
);
INGENIEROS ASOCIADOS
/*=============================================================
=*/
/* Table: TIPO_ARTICULO
*/
/*=============================================================
=*/
create table TIPO_ARTICULO
(
COD_TIPO
NUMBER(4)
not null,
NOM_TIPO
CHAR(40)
not null,
constraint PK_TIPO_ARTICULO primary key (COD_TIPO)
);
/*=============================================================
=*/
/* Table: VENTA
*/
/*=============================================================
=*/
create table VENTA
(
NUM_VENTA
NUMBER(10)
not null,
ID_CLIENTE
NUMBER(15)
not null,
FECHA_VENTA
DATE
not null,
constraint PK_VENTA primary key (NUM_VENTA)
);
/*=============================================================
=*/
/* Index: REALIZA_FK
*/
/*=============================================================
=*/
create index REALIZA_FK on VENTA (
ID_CLIENTE ASC
);
alter table ARTICULO
add constraint FK_ARTICULO_CLASIFICA_TIPO_ART foreign key (COD_TIPO)
references TIPO_ARTICULO (COD_TIPO);
alter table ARTICULO_PUNTOS_CATALOGO
add
constraint
FK_ARTICULO_ASIGNAPUN_ARTICULO
(COD_ART)
references ARTICULO (COD_ART);
alter table ARTICULO_PUNTOS_CATALOGO
foreign
key
INGENIEROS ASOCIADOS
add
constraint
FK_ARTICULO_DETALLA_CATALOGO
foreign
key
(NUM_CATALOGO, IND_CATALOGO)
references
CATALOGO_TIPOARTICULO
(NUM_CATALOGO,
IND_CATALOGO);
alter table CANJE
add constraint FK_CANJE_SOLICITA_CLIENTE foreign key (ID_CLIENTE)
references CLIENTE (ID_CLIENTE);
alter table CATALOGO_TIPOARTICULO
add
constraint
FK_CATALOGO_POR_CATALOGO
(NUM_CATALOGO)
references CATALOGO (NUM_CATALOGO);
foreign
key
foreign
key
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
CAPA LOGICA
PROCEDIMIENTOS Y PRUEBAS
ARTICULOS
INSERTAR
Procedimiento almacenado Insertar Artculo
**********************************************************************************************
create or replace procedure insertararticulo(codart number,codtipo number,nomart
varchar2,vrcompra number, vrventa number)
is
begin
insert into articulo values(codart, codtipo, nomart, vrcompra, vrventa);
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
begin
select * into v_articulo from articulo
where codart =arti;
a:= true;
exception
when No_data_found then
a:=false;
end verificararticulo;
**********************************************************************************************
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
ACTUALIZAR
Procedimiento Almacenado Actualizar Registro Artculo
**********************************************************************************************
create
or
replace
procedure
actualizaregistroarticulo(reg_articulo
articulo%rowtype)
is
begin
update articulo set codtipo =reg_articulo.codtipo ,nomart =reg_articulo.nomart
,vrcompra =reg_articulo.vrcompra ,vrventa = reg_articulo.vrventa
where codart = reg_articulo.codart;
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
begin
validaarticulo(reg_articulo.codart,res);
if res = true then
actualizaregistroarticulo(reg_articulo);
else raise noexiste;
end if;
INGENIEROS ASOCIADOS
exception
WHEN noexiste THEN
dbms_output. put_line(' artculo no existe ');
end;
**********************************************************************************************
begin
reg_articulo.codart :=&Cdigo_artculo;
reg_articulo.codtipo := &Cdigo_tipo;
INGENIEROS ASOCIADOS
reg_articulo.nomart :='&Nombre_artculo';
reg_articulo.vrcompra :=&Valor_compra;
reg_articulo.vrventa :=&Valor_venta;
validaractualizacionarticulo(reg_articulo);
end;
**********************************************************************************************
ELIMINAR
Eliminar Registro Artculo
**********************************************************************************************
create or replace procedure eliminarregistroarticulo(arti number)
is
begin
delete from articulo where codart = arti;
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
raise noexiste;
end if;
exception
WHEN noexiste THEN
dbms_output.put_line('Este artculo no existe');
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
CONSULTA A UN REGISTRO
Consultar Registro Artculo
**********************************************************************************************
create or replace procedure consultaregistroarticulo(arti in number, regart out
articulo%rowtype)
is
begin
select * into regart
from articulo
where codart = arti;
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
consultaregistroarticulo(arti,v_regart);
despliegaarticulo(v_regart);
else raise noexiste;
end if;
exception
WHEN noexiste THEN
dbms_output. put_line(' artculo no existe ');
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
begin
validarconsultararticulo12(v_ar);
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
'
'||
dbms_output.put_line('**********************************************************');
||lpad(
lpad(
INGENIEROS ASOCIADOS
end LOOP;
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
begin
listararticulos3;
end;
**********************************************************************************************
CLIENTES
INSERTAR
Procedimiento Almacenado Insertar Cliente
**********************************************************************************************
create
or
replace
procedure
insertarcliente(idclient
number,nomclient
varchar2,dirclient varchar2,emailclient varchar2, acumpuntos number)
is
begin
insert into cliente values(idclient, nomclient, dirclient, emailclient, acumpuntos);
INGENIEROS ASOCIADOS
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
ACTUALIZAR
Procedimiento Almacenado Actualizar Registro Cliente
**********************************************************************************************
create or replace procedure actualizaregistrocliente(reg_cliente cliente%rowtype)
is
begin
update cliente set nomclient =reg_cliente.nomclient ,dirclient =reg_cliente.dirclient
,emailclient =reg_cliente.emailclient ,acumpuntos = reg_cliente.acumpuntos
where idclient = reg_cliente.idclient;
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
procedure
res boolean;
noexiste exception;
begin
validacliente(reg_cliente.idclient,res);
validaractualizacioncliente(
reg_cliente
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
raise noexiste;
end if;
exception
WHEN noexiste THEN
dbms_output.put_line('Este cliente no existe');
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
begin
validareliminarcliente (idclient);
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
Consulta a un Registro
**********************************************************************************************
create or replace procedure consultaregistrocliente(ident in number, regcliente out
cliente%rowtype)
is
begin
select * into regcliente
from cliente
where idclient = ident;
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
INGENIEROS ASOCIADOS
TRIGGERS
**********************************************************************************************
CREATE OR REPLACE TRIGGER LOGCLIENTE AFTER INSERT OR DELETE
OR UPDATE ON CLIENTE
declare
tipoaccion char(1);
begin
if inserting then
tipoaccion :='I';
elsif updating then
tipoaccion :='U';
else
tipoaccion :='D';
end if;
end;
/
**********************************************************************************************
INGENIEROS ASOCIADOS
**********************************************************************************************
create or replace TRIGGER LOGARTICULO AFTER INSERT OR DELETE OR
UPDATE ON ARTICULO
declare
tipoaccion char(1);
begin
if inserting then
tipoaccion :='I';
elsif updating then
tipoaccion :='U';
else
INGENIEROS ASOCIADOS
tipoaccion :='D';
end if;
end;
**********************************************************************************************
INGENIEROS ASOCIADOS
LOG
Datos Para Prueba de Auditoria
**********************************************************************************************
INSERT INTO CLIENTE(idclient, nomclient, dirclient, emailclient, acumpuntos)
VALUES
(1007,
'CARMEN
PEREZ','CADIZ
CS.23
#28-15',
'carmenperez@yahoo.es',7);
UPDATE CLIENTE
SET acumpuntos = 6;
UPDATE CLIENTE
SET dirclient = ' JORDAN CS.100 # 10-25'
WHERE idclient =1007;
**********************************************************************************************
INGENIEROS ASOCIADOS