Está en la página 1de 21

TECNOLOGICO NACIONAL DE MÉXICO

INSTITUTO TECNOLÓGICO DE PUEBLA

Nombre:
Pérez Sánchez Francisco Manuel
No. De control: 18221794
Especialidad: TIC´S

Nombre de la materia:
Taller de base de datos

Reporte
Unidad 2

innovación Tecnología

Horario:
Lunes y miércoles 7:00-9:00

Nombre del docente:


MARIA JUANA CONTRERAS

SEMESTRE ENERO – JUNIO 2021


DIAGRAMA ENTIDAD RALACION FINAL

En este reporte se realizaron correcciones que son necesarias para desarrollar y reforzar lo
ya practicado en clases y así emplear las sintaxis y cada uno de los comandos funciones
para comenzar se realizaron muchos cambios en diagrama entidad FINAL

También se realizaron algunos cambios en las llaves primarias y foráneas que estaban
erróneas y así poder realizar un buen diagrama entidad relación donde cada llave es
heredada por la tabla padre y donde observamos distintos tipos de relaciones como uno a
uno, uno a muchos y muchos a muchos
CREAR TABLAS (COMANDOS CREATE)

Vamos a observar que el siguiente punto realizamos los comandos correspondientes para
realizar la base de datos donde respetamos las relaciones donde aplicamos integridad
referencial con sus respectivas llaves primarias y foráneas.

CREATE TABLE cliente(
id VARCHAR2(2),
rfc VARCHAR2(13),
celular VARCHAR2(13),
nombre VARCHAR2(30),
app VARCHAR2(30),
apm VARCHAR2(30),
calle VARCHAR2(20),
num VARCHAR2(5),
colonia VARCHAR2(20),
cod_pos VARCHAR2(5),
email VARCHAR2(30),
CONSTRAINT cli_id_rfc_pk  PRIMARY KEY(id,rfc));

CREATE TABLE devolucion(
id_control VARCHAR2(3), 
fecha_dev DATE,
descripcion VARCHAR2(30),
cantidad NUMBER(9,2),
estatus VARCHAR2(10),
CONSTRAINT dev_id_pk PRIMARY KEY(id_control));

CREATE TABLE departamento(
numero_linea NUMBER(1),
nombre VARCHAR2(15),
encargado VARCHAR2(10),
numero_empleados NUMBER(3),
lineas_produccion NUMBER(1),
CONSTRAINT dep_num_pk PRIMARY KEY(numero_linea));

CREATE TABLE paqueteria (
id_paqueteria  VARCHAR2(6),
ent_envio      VARCHAR2(4),
nombre         VARCHAR2(10),
tipo_paq       VARCHAR2(13),
tarifa         NUMBER(7,2),
peso           NUMBER(6,2),
CONSTRAINT paq_paqueteria_pk PRIMARY KEY (id_paqueteria));

CREATE TABLE proveedores (
id_pro            VARCHAR2(4),
nombre         VARCHAR2(10),
email          VARCHAR2(30),
credito        NUMBER(10),
telefono       VARCHAR2(12),
rfc            VARCHAR2(13),
CONSTRAINT prid_pk PRIMARY KEY (id_pro));

CREATE TABLE empleado(
id VARCHAR2(2),
rfc VARCHAR2(13),
celular VARCHAR2(12),
nombre VARCHAR2(30),
app VARCHAR2(30),
apm VARCHAR2(20),
email VARCHAR2(30),
calle VARCHAR2(20),
numero VARCHAR2(5),
colonia VARCHAR2(30),
cod_postal VARCHAR2(5),
depnum NUMBER(1),
emp_id VARCHAR2(2),
emp_rfc VARCHAR2(18),
CONSTRAINT ei_pk PRIMARY KEY (id,rfc),
CONSTRAINT en_pk FOREIGN KEY (depnum) REFERENCES departamento(numero_linea),
CONSTRAINT ei_fk FOREIGN KEY (emp_id,emp_rfc) REFERENCES empleado(id,rfc));

CREATE TABLE factura_venta(
num_fac          VARCHAR2(8),
fecha_vigencia   DATE,
total       NUMBER(9,2), 
cfdi        NUMBER(2),
cli_id      VARCHAR2(2),
cli_rfc     VARCHAR2(13),
CONSTRAINT fn_pk PRIMARY KEY (num_fac),
CONSTRAINT fi_fk FOREIGN KEY (cli_id,cli_rfc) REFERENCES cliente(id,rfc));

CREATE TABLE nomina(
num_emision  VARCHAR2(4),
sucursal_emision VARCHAR2(15),
sueldo   NUMBER(7,2),
fecha_emision DATE,
emp_id   VARCHAR2(2),
emp_rfc   VARCHAR2(13),
CONSTRAINT nn_pk PRIMARY KEY (num_emision),
CONSTRAINT ni_fk FOREIGN KEY (emp_id,emp_rfc) REFERENCES empleado(id,rfc));

CREATE TABLE factura_compra (
num_fac    VARCHAR2(8),
fecha_compra DATE,
fecha_vigencia DATE,
subtotal       NUMBER(9,2),
iva            NUMBER(3,2),
total          NUMBER(9,2),
prov_id        VARCHAR2(104),
CONSTRAINT fac_id_pk PRIMARY KEY (num_fac),
CONSTRAINT fac_pro_id_fk FOREIGN KEY (prov_id) REFERENCES proveedores (id_pro));

CREATE TABLE producto(
modelo   VARCHAR2(5),
folio    VARCHAR2(8),
marca    VARCHAR2(10),
n_serie  VARCHAR2(5),
costo_uni  NUMBER(5,2),
descripcion VARCHAR2(15),
existencias  NUMBER(6),
depnum       NUMBER(1),
fac_num      VARCHAR2(8),        
CONSTRAINT pmf_pk PRIMARY KEY (modelo,folio),
CONSTRAINT pd_fk FOREIGN KEY (depnum) REFERENCES departamento(numero_linea),
CONSTRAINT pf_fk FOREIGN KEY (fac_num) REFERENCES factura_compra(num_fac));

CREATE TABLE ticket(
id VARCHAR2(8),
subtotal NUMBER(9,2),
iva NUMBER(3,2),
total NUMBER(9,2),
fac_num VARCHAR2 (8),
dev_id VARCHAR2(3),
pro_mod VARCHAR2(5),
pro_fol VARCHAR(8),
CONSTRAINT tic_id_pk PRIMARY KEY(id),
CONSTRAINT factick_fk FOREIGN KEY(fac_num) REFERENCES factura_venta(num_fac),
CONSTRAINT devtic_fk FOREIGN KEY(dev_id) REFERENCES devolucion(id_control),
CONSTRAINT protic_fk FOREIGN KEY(pro_mod,pro_fol) REFERENCES producto(modelo,folio));  
 

CREATE TABLE entrega (
id_envio        VARCHAR2(4),
estado_producto VARCHAR2(10),
domicilio       VARCHAR2(50),
fecha_salida    DATE,
fecha_entrega   DATE,
costo           NUMBER(6,2),
paq_id          VARCHAR2(6),
pro_mod         VARCHAR2(5),
pro_fol         VARCHAR2(8),
CONSTRAINT ent_id_envio_id_pk PRIMARY KEY (id_envio),
CONSTRAINT ent_paq_id_fk FOREIGN KEY (paq_id) REFERENCES paqueteria (id_paqueteria),
CONSTRAINT ent_pro_mod_fk FOREIGN KEY (pro_mod,pro_fol) REFERENCES producto (modelo,fo
lio));

CREATE TABLE garantia (
id            VARCHAR2(4),
descripcion    VARCHAR2(30),
observacion    VARCHAR2(50),
fecha_vigencia DATE,
estatus        VARCHAR2(10),
pro_mod        VARCHAR2(5),
pro_fol        VARCHAR2(8),
CONSTRAINT gar_id_pk PRIMARY KEY (id),
CONSTRAINT gp_fk FOREIGN KEY (pro_mod,pro_fol) REFERENCES producto (modelo,folio));

INSERTAR DATOS (COMANDO INSERT)


En el siguiente punto insertaremos 5 registros por cada tabla donde de la misma forma
observando cada registro aplicamos integridad referencial ya que de lo contrario no dejaría
ingresar registros en la tabla.
INSERT INTO cliente 
VALUES ('SA','MAFJ040501M25','2222-152-5085','Juan','Martínez','Flores','Calle Morelos
','#12','Col. La Loma','19251','juanm@gmail.com');
INSERT INTO cliente
VALUES('SB','LASM040501J14','222-272-5096','Martha','Lascurain','Salgado','Calle Aldam
a','#17','Col. La Paz','54365','marlas12@gmail.com');
INSERT INTO cliente
VALUES('SC','MEPF970806H89','222-345-1478','Fernando','Mendiola','Paredes','Calle Glad
iola','#14','Col. La Margarita','54251','fernimend@conceptos.com');
INSERT INTO cliente
VALUES('SD','CACD780925F21','222-245-4598','Dalila','Casas','Cortes','Privada F
','#17','Col. La Flor','53254','dalila@yahoo.com');
INSERT INTO cliente
VALUES('SE','FLDS990124B17','222-478-2360','Sarahí','Flores','Durán','Calle Maravillas
','#44','Col. La Piedad','87451','sarhiflor@yahoo.com');

INSERT INTO devolucion
VALUES('D01','14-sep-17','No prende el celular',6799.00,'Vigente');
INSERT INTO devolucion
VALUES('D02','20-nov-18',NULL,25699.00,'No vigente');
INSERT INTO devolucion
VALUES ('D03','06-abr-19','No funciona el secado',17149.00,'Vigente');
INSERT INTO devolucion
VALUES ('D04','08-may-20','Monitor con pantalla verde',3199.00,'Vigente');
INSERT INTO devolucion
VALUES ('D05','27-ene-21',NULL,99449.00,'No vigente');

INSERT INTO departamento
VALUES (1,'Electrónica','Juan',25,2);
INSERT INTO departamento
VALUES(2,'Línea Blanca','María',30,3);
INSERT INTO departamento
VALUES (3,'Línea Blanca','María',NULL,3);
INSERT INTO departamento
VALUES(4,'Electrónica','Juan',NULL,2);
INSERT INTO departamento
VALUES(5,'Línea Blanca','Juan',NULL,3);

INSERT INTO paqueteria
VALUES('PQ0001','E001','Estafeta','internacional',1500.52,5.52);
INSERT INTO paqueteria
VALUES('PQ0002','E002','DHL','nacional',8253.52,9.62);
INSERT INTO paqueteria
VALUES ('PQ0003','E003','FedEx','internacional',21423.25,25.25);
INSERT INTO paqueteria
VALUES('PQ0004','E004','Sendex','nacional',2353.52,3.2);
INSERT INTO paqueteria
VALUES('PQ1500','E005','Redpack','internacional',5548.55,6.69);
INSERT INTO proveedores
VALUES('P001','T-SYSTEM','tsystem@gmail.com',10,'222-152-9074','TSYT010204P14');
INSERT INTO proveedores
VALUES('P002','APPLE','apple.ios@gmail.com',12,'222-272-9650','APPL040708YU5');
INSERT INTO proveedores
VALUES('P003','HP','hp@hotmail.com',15,'222-345-8741','HPC0781214ER5');
INSERT INTO proveedores
VALUES('P015','LAVMEX','lavmex@outlook.com',25,'222-245-8954','LAVM891117V02');
INSERT INTO proveedores
VALUES('P200','ELECTRO','electro@yahoo.com',30,'222-478-0632','ELEC750325L90');

INSERT INTO empleado
VALUES ('E1', 'DUGC000412HPL', 2223457945, 'Carlos', 'Duarte', 'Gomez', 'carlosdg@gmai
l.com', 'Calle Rosa', '#14', 'Col. La Paz', 72450, 1, 'E1', 'DUGC000412HPL');
INSERT INTO empleado
VALUES ('E2', 'FLFF000712DAS', 2224591210, 'Fatima', 'Flores', 'Flores', 'fatfl@hotmai
l.com', 'Calle Clavel', '#24', 'Col. La Loma', 78902, 2, 'E2', 'FLFF000712DAS');
INSERT INTO empleado
VALUES ('E3', 'SARC000512ASD', 2229520010,'Carmen', 'Salgado', 'Salgado', 'salcarmen22
@yahoo.com', 'Calle Flores', '#17', 'Col. El jardín', 65420,  3, 'E3', 'SARC000512ASD'
);
INSERT INTO empleado
VALUES ('E4', 'PARG000124DFG', 2221008012,'Gerardo', 'Paredes', 'Conde', 'gepa78@hotma
il.com', 'Calle Girasol', '#5',  'Col. La Planta', 12456, 4, 'E4', 'PARG000124DFG');
INSERT INTO empleado
VALUES ('E5', 'AMJL980001GHJ', 2220021050, 'Luis', 'Ambriz', 'Lopez', 'Luis-.-
@gmail.com', 'Calle Gladiola', '#15', 'Col. La Villa', 74102, 5, 'E5', 'AMJL980001GHJ'
);

INSERT INTO factura_venta
VALUES ('FABCD001', '13-sep-18', 7886.84, 03, 'SA', 'MAFJ040501M25');
INSERT INTO factura_venta
VALUES ('FABCD002', '18-nov-19', 29810.84, 03, 'SB', 'LASM040501J14');
INSERT INTO factura_venta
VALUES ('FABCD003', '04-abr-20', 19892.84, 03, 'SC', 'MEPF970806H89');
INSERT INTO factura_venta
VALUES ('FABCD004', '07-may-21', 3710.84, 04, 'SD', 'CACD780925F21');
INSERT INTO factura_venta
VALUES ('FABCD005', '25-ene-22', 115360.84, 01, 'SE', 'FLDS990124B17');
INSERT INTO nomina
VALUES ('C001', 'Cuauhtemoc', 15000.00, '09-oct-21', 'E1', 'DUGC000412HPL');
INSERT INTO nomina
VALUES ('B075', 'Benito Juarez', 25000, '10-sep-20', 'E2', 'FLFF000712DAS');
INSERT INTO nomina
VALUES ('P300', 'Polanco', 30000, '20-nov-21', 'E3', 'SARC000512ASD');
INSERT INTO nomina
VALUES ('L580', 'Lindavista', 10000, '20-may-20', 'E4', 'PARG000124DFG');
INSERT INTO nomina
VALUES ('N700', 'Naucalpan', 8000, '10-ene-21', 'E5', 'AMJL980001GHJ');

INSERT INTO factura_compra
VALUES ('FE130917', '13-sep-17', '13-oct-17', 6799.00, 1.16, 7886.84, 'P001');
INSERT INTO factura_compra
VALUES ('FE181118', '18-nov-18', '19-nov-18', 25699.00, 1.16, 29810.84, 'P002');
INSERT INTO factura_compra
VALUES ('FL040419', '04-abr-19' ,'04-may-19', 17149.00, 1.16, 19892.84, 'P003');
INSERT INTO factura_compra
VALUES ('FE070520', '07-may-20', '07-jun-20', 3199.00, 1.16, 3710.84, 'P015');
INSERT INTO factura_compra
VALUES ('FL250121', '25-ene-21', '25-feb-21', 99449.00, 1.16, 115360.84, 'P200');

INSERT INTO producto
VALUES ('GM31B', 12000001, 'Samnsung', 'GM001', 800.00, 'modelo 2020', 5, 1, 'FE130917
');
INSERT INTO producto
VALUES ('STV20', 12000002, 'Samnsung', 'STV02', 500.00, 'modelo 2021', 10, 2, 'FE18111
8');
INSERT INTO producto
VALUES ('SECDR', 12000003, 'SECMEX', 'SEC15', 900.00, 'secado rapido', 20, 3, 'FL04041
9');
INSERT INTO producto
VALUES ('MFHFL', 12000004,'HP','MFH14', 200.00, 'concava', 4, 4, 'FE070520');
INSERT INTO producto
VALUES ('REFHB', 12000005, 'FAM HUB', 'REF02', 950.00, 'digital', 15, 5, 'FL250121');

INSERT INTO ticket
VALUES ('GE130917',7886.84,1.16,9148.73,'FABCD001','D01','GM31B',12000001);
INSERT INTO ticket
VALUES ('SE181118',29810.84,1.16,34580.57,'FABCD002','D02','STV20',12000002);
INSERT INTO ticket
VALUES ('SL040419',19892.84,1.16,23075.69,'FABCD003','D03','SECDR',12000003);
INSERT INTO ticket
VALUES ('ME070520',3710.84,1.16,4304.57,'FABCD004','D04','MFHFL',12000004);
INSERT INTO ticket
VALUES ('RL250121',115360.84,1.16,133818.57,'FABCD005','D05','REFHB',12000005);

INSERT INTO entrega
VALUES('E001','Proceso','Calle Morelos #12 Col. La Loma','13-sep-17','15-sep-18', 350
0.00,'PQ0001','GM31B', 12000001);
INSERT INTO entrega
VALUES('E002','Entregado','Calle Aldama #17 Col. La Paz','18-nov-18',NULL, 400
0.00,'PQ0002','STV20', 12000002);
INSERT INTO entrega
VALUES('E003','Proceso','Calle Gladiola #14 Col. La Margarita','04-abr-19','06-abr-
20', 2500.00,'PQ0003','SECDR', 12000003);
INSERT INTO entrega
VALUES('E004','Saliendo','Privada F #17 Col. La Flor','07-may-20','09-may-21', 150
0.0,'PQ0004','MFHFL', 12000004);
INSERT INTO entrega
VALUES('E005','Proceso','Calle Maravillas #44 Col. La Piedad','25-ene-21','27-ene-22', 
1000.00,'PQ1500','REFHB', 12000005);

INSERT INTO garantia
VALUES ('G100','No prende el celular','Botón sumido','13-sep-
18','Vigente','GM31B',12000001);
INSERT INTO garantia
VALUES ('G101','No enciende la TV',NULL,'19-nov-19','No vigente','STV20',12000002);
INSERT INTO garantia
VALUES ('G102','No funciona la secadora','No tiene pilas','04-abr-
20','Vigente','SECDR', 12000003);
INSERT INTO garantia
VALUES ('G103','Monitor con pantalla verde','Error de fabricacion','08-may-21','No vig
ente','MFHFL',12000004);
INSERT INTO garantia
VALUES ('G104','No funciona el congelador',NULL,'25-ene-
22','Vigente','REFHB',12000005);

ACTUALIZAR DATOS (COMANDOS UPDATE)


En este punto se complico un poco ya que al realizar el código y las respectivas
actualizaciones nos arrojaba el error de restricción de integridad ya que se estaba violando,
al realizar un cambio en la tabla papa la tabla hijo no realizaba ningún cambio eso provocaba
el error y no realizaba el cambio, entonces para esta solución se buscaron distintas
alternativas donde se trato de buscar un update en cascada pero no se tuvo éxito entonces
posteriormente de investigar se encontró una solución donde podemos desactivar las claves
foraneas de una tabla hijo fue ahí donde se realizo los cambios donde heredada cada uno de
sus respectivos hijos cabe mencionar que no es muy recomendable hacer esto ya que
puedes perder la integridad de los datos entonces es por ello se analizó el diagrama entidad
relación para determinar los cambios de las tablas padre y tablas hijos

Código PARA UPDATES donde se modifican 5 padres y con sus respetivos hijos donde
podemos observar la integridad referencial ya que sino desactivamos las llaves foráneas no
nos deja actualizar los datos posteriormente se activa las llaves para comprobar que la
integridad sigue activa

ALTER TABLE factura_venta 
DISABLE CONSTRAINT fi_fk;
UPDATE factura_venta  SET cli_id= 'SL' WHERE cli_id='SE';
UPDATE cliente SET id= 'SL' WHERE id='SE';
ALTER TABLE factura_venta
ENABLE CONSTRAINT fi_fk;

ALTER TABLE producto 
DISABLE CONSTRAINT PD_FK;
ALTER TABLE empleado
DISABLE CONSTRAINT EN_PK;
UPDATE producto SET depnum= 8 WHERE depnum=3;
UPDATE departamento  SET numero_linea= 8 WHERE numero_linea=3;
UPDATE empleado  SET depnum= 8 WHERE depnum=3;
ALTER TABLE producto 
ENABLE CONSTRAINT PD_FK;
ALTER TABLE empleado
ENABLE CONSTRAINT EN_PK;

ALTER TABLE nomina
DISABLE CONSTRAINT NI_FK;
ALTER TABLE empleado
DISABLE CONSTRAINT EI_FK;
UPDATE nomina SET emp_rfc='PRUEBA' WHERE emp_rfc='FLFF000712DAS';
UPDATE empleado  SET rfc='PRUEBA' WHERE rfc='FLFF000712DAS';
UPDATE empleado  SET emp_rfc='PRUEBA' WHERE emp_rfc='FLFF000712DAS';
ALTER TABLE nomina
ENABLE CONSTRAINT NI_FK;
ALTER TABLE empleado
ENABLE CONSTRAINT EI_FK;

ALTER TABLE entrega
DISABLE CONSTRAINT ENT_PAQ_ID_FK;
UPDATE entrega SET paq_id='PRUEBA' WHERE paq_id='PQ0002';
UPDATE paqueteria SET id_paqueteria='PRUEBA' WHERE id_paqueteria='PQ0002';
ALTER TABLE entrega
ENABLE CONSTRAINT ENT_PAQ_ID_FK;

ALTER TABLE garantia
DISABLE CONSTRAINT gp_fk;
ALTER TABLE ticket
DISABLE CONSTRAINT protic_fk;
ALTER TABLE entrega
DISABLE CONSTRAINT ent_pro_mod_fk;
UPDATE garantia SET pro_mod='HOLA1' WHERE pro_mod='SECDR';
UPDATE ticket SET pro_mod='HOLA1' WHERE pro_mod='SECDR';
UPDATE entrega SET pro_mod='HOLA1' WHERE pro_mod='SECDR';
UPDATE producto SET modelo='HOLA1' WHERE modelo='SECDR';
ALTER TABLE garantia
ENABLE CONSTRAINT gp_fk;
ALTER TABLE ticket
ENABLE CONSTRAINT protic_fk;
ALTER TABLE entrega
ENABLE CONSTRAINT ent_pro_mod_fk;

ELIMINAR REGISTROS (COMANDO DELETE)


Al crear una restricción de clave externa, Oracle tiene como valor predeterminado "al eliminar
restringir" para asegurarse de que no se pueden eliminar filas principales mientras sigue
existiendo una fila secundaria.

Sin embargo, también puede implementar en la cascada eliminar para eliminar todas las filas
secundarias cuando se elimina una fila primaria.

El uso de "on delete cascade" y "on delete restrict" se utiliza cuando existe una relación
estricta de uno a varios, de modo que cualquier fila "huérfana" infringe la integridad de los
datos.

Muchos sistemas utilizan "on delete cascade" cuando tienen actualizaciones ad hoc para que
el usuario final no tenga que navegar por la tabla secundaria y eliminar docenas o cientos de
entradas secundarias. Por supuesto, el uso de "on delete cascade" es peligroso debido a
posibles errores y porque la emisión de una sola eliminación en una fila primaria podría
invocar miles de eliminaciones de la tabla secundaria.

Obviamente, si está utilizando "en cascada de eliminación" y no crea un índice en la clave


primaria secundaria, la eliminación de una fila primaria requeriría un análisis de tabla
completa de la tabla secundaria, para buscar y eliminar las filas secundarias.

En los siguientes comandos como observamos primero se utilizaron los comandos ALTER
TABLE

Para modificar las respectivas tablas donde se eliminaron todas las llaves foráneas para así
agregar las mismas llaves foráneas, pero activando la eliminación en cascada ya que al crear
las tablas no se activaron desde un principio para observar así el comando ON DELETE
CASCADE

ALTER TABLE empleado
DROP CONSTRAINT en_pk;
ALTER TABLE empleado
DROP CONSTRAINT ei_fk;
ALTER TABLE factura_venta
DROP CONSTRAINT fi_fk;
ALTER TABLE nomina
DROP CONSTRAINT ni_fk;
ALTER TABLE factura_compra
DROP CONSTRAINT fac_pro_id_fk;
ALTER TABLE producto
DROP CONSTRAINT pd_fk;
ALTER TABLE producto
DROP CONSTRAINT pf_fk;
ALTER TABLE ticket
DROP CONSTRAINT factick_fk;
ALTER TABLE ticket
DROP CONSTRAINT devtic_fk;
ALTER TABLE ticket
DROP CONSTRAINT protic_fk;
ALTER TABLE entrega
DROP CONSTRAINT ent_paq_id_fk;
ALTER TABLE entrega
DROP CONSTRAINT ent_pro_mod_fk;
ALTER TABLE garantia
DROP CONSTRAINT gp_fk;

ALTER TABLE empleado
ADD CONSTRAINT en_pk FOREIGN KEY (depnum) REFERENCES departamento(numero_linea) ON DEL
ETE CASCADE;
ALTER TABLE empleado
ADD CONSTRAINT ei_fk FOREIGN KEY (emp_id,emp_rfc) REFERENCES empleado(id,rfc) ON DELET
E CASCADE;
ALTER TABLE factura_venta
ADD CONSTRAINT fi_fk FOREIGN KEY (cli_id,cli_rfc) REFERENCES cliente(id,rfc) ON DELETE 
CASCADE;
ALTER TABLE nomina
ADD CONSTRAINT  ni_fk FOREIGN KEY (emp_id,emp_rfc) REFERENCES empleado(id,rfc) ON DELE
TE CASCADE;
ALTER TABLE factura_compra
ADD CONSTRAINT fac_pro_id_fk FOREIGN KEY (prov_id)REFERENCES proveedores (id_pro) ON D
ELETE CASCADE;
ALTER TABLE producto
ADD CONSTRAINT  pd_fk FOREIGN KEY (depnum) REFERENCES departamento(numero_linea) ON DE
LETE CASCADE;
ALTER TABLE producto
ADD CONSTRAINT pf_fk FOREIGN KEY (fac_num) REFERENCES factura_compra(num_fac) ON DELET
E CASCADE;
ALTER TABLE ticket
ADD CONSTRAINT factick_fk FOREIGN KEY(fac_num) REFERENCES factura_venta(num_fac) ON DE
LETE CASCADE;
ALTER TABLE ticket
ADD CONSTRAINT devtic_fk FOREIGN KEY(dev_id) REFERENCES devolucion(id_control) ON DELE
TE CASCADE;
ALTER TABLE ticket 
ADD CONSTRAINT protic_fk FOREIGN KEY(pro_mod,pro_fol) REFERENCES producto(modelo,folio
) ON DELETE CASCADE;
ALTER TABLE entrega
ADD CONSTRAINT ent_paq_id_fk FOREIGN KEY (paq_id) REFERENCES paqueteria (id_paqueteria
) ON DELETE CASCADE;
ALTER TABLE entrega
ADD CONSTRAINT ent_pro_mod_fk FOREIGN KEY (pro_mod,pro_fol) REFERENCES producto (model
o,folio) ON DELETE CASCADE;
ALTER TABLE garantia
ADD CONSTRAINT gp_fk FOREIGN KEY (pro_mod,pro_fol) REFERENCES producto (modelo,folio) 
ON DELETE CASCADE;

DELETE proveedores WHERE id_pro='P015';
DELETE empleado WHERE id='E4';
DELETE cliente WHERE id='SD';
DELETE garantia WHERE id='G103';
DELETE paqueteria WHERE id_paqueteria='PQ0004';

CONSULTAS DE LAS TABLAS (COMANDOS SELECT)

La instrucción SELECT de Oracle se utiliza para recuperar registros de una o varias tablas de
una base de datos de Oracle.

Sintaxis

La sintaxis de la instrucción SELECT en Oracle/PLSQL es:

SELECT expressions

FROM tables

[WHERE conditions];

Parámetros o argumentos
Expresiones

Las columnas o cálculos que desea recuperar. Utilice * si desea seleccionar todas las
columnas.

Mesas

Las tablas de las que desea recuperar registros. Debe haber al menos una tabla enumerada
en la cláusula FROM.

DONDE las condiciones

Opcional. Las condiciones que deben cumplirse para seleccionar los registros. Si no se
proporciona ninguna condición, se seleccionarán todos los registros.

CONSULTAS SENCILLAS

/* 3 Consulta sencillas en Recursividad*/

SELECT * FROM empleado;

SELECT colonia, calle, cod_postal 
FROM empleado;

SELECT nombre || ' su id es :' || id ||' y su rfc es ' || rfc || '.' "INFORMACIÓN BASI
CA" 
FROM empleado;

SELECT nombre, numero, emp_id 
FROM empleado  
WHERE depnum > 3;

/* 3 Consultas sencilla en relacion uno a muchos */

SELECT * FROM producto;
SELECT * FROM entrega;

SELECT p.id_paqueteria, p.nombre, p.tarifa, e.costo
FROM paqueteria p
JOIN entrega e
ON (p.id_paqueteria = e.paq_id);
SELECT p.nombre || ' el id de envio es:' || e.id_envio "Información de envio"
FROM paqueteria p
JOIN entrega e
ON (p.id_paqueteria = e.paq_id);

SELECT p.nombre || ', enviara un paquete a: ' || e.domicilio || ', con un costo de: ' 
|| e.costo || ' pesos mexicanos' "Dirección de envio"
FROM paqueteria p
JOIN entrega e
ON (p.id_paqueteria = e.paq_id);

/* 3 Consultas sencillas en relacion uno a uno */

SELECT * FROM ticket;
SELECT * FROM devolucion;

SELECT t.id, d.id_control, d.estatus
FROM ticket t
JOIN devolucion d
ON (t.id = 'GE130917');

SELECT t.fac_num || ' tiene una fecha de devolucio de: ' || d.fecha_dev "Fecha de devo
lución"
FROM ticket t
JOIN devolucion d
ON (t.id = 'GE130917');

SELECT t.id || ' su devolución tiene un estatus de: ' || d.estatus "Revisión de estatu
s"
FROM ticket t
JOIN devolucion d
ON (t.id = 'GE130917');

/* 3 Consultas sencillas en relacion muchos a muchos */

SELECT * FROM ticket;
SELECT * FROM producto;
SELECT * FROM factura_venta;

SELECT t.id, p.modelo, f.num_fac
FROM producto p
JOIN ticket t ON (p.modelo = t.pro_mod)
JOIN factura_venta f ON (f.num_fac = 'FABCD001'); 

SELECT t.id || ' tiene un folio de: ' || p.folio || ' y un total de: ' || f.total || ' 
pesos mexicanos' "Total"
FROM producto p
JOIN ticket t ON (p.modelo = t.pro_mod)
JOIN factura_venta f ON (f.num_fac = 'FABCD001'); 

SELECT t.dev_id || ' es de la marca: ' || p.marca || ' y un numero de factura de: ' || 
f.num_fac "Modelo"
FROM producto p
JOIN ticket t ON (p.modelo = t.pro_mod)
JOIN factura_venta f ON (f.num_fac = 'FABCD001')
WHERE (t.id) = 'GE130917';

Descripción

Oracle JOINS se utilizan para recuperar datos de varias tablas. Un Oracle JOIN se realiza
cada vez que se unen dos o más tablas en una instrucción SQL.

Hay 4 tipos diferentes de uniones de Oracle:

Oracle INNER JOIN (o a veces llamado unión simple)

Oracle LEFT OUTER JOIN (o a veces llamado LEFT JOIN)

Oracle RIGHT OUTER JOIN (o a veces llamado RIGHT JOIN)

Oracle FULL OUTER JOIN (o a veces llamado FULL JOIN)

Así que vamos a discutir la sintaxis join de Oracle, mirar ilustraciones visuales de Oracle
JOINS y explorar ejemplos de Oracle JOIN.

SELECT CONSULTAS CON 3 TABLAS


/* Consultas a 3 tablas con relación muchos a muchos */
SELECT * FROM ticket;
SELECT * FROM producto;
SELECT * FROM factura_venta;

SELECT t.subtotal, p.n_serie, f.total
FROM producto p
JOIN ticket t ON (p.modelo = t.pro_mod)
JOIN factura_venta f ON (f.num_fac = 'FABCD001'); 

SELECT t.total || ' es el total de la compra con el folio: ' || p.folio || ' y un nume
ro de factura de: ' || f.num_fac "Folio"
FROM producto p
JOIN ticket t ON (p.modelo = t.pro_mod)
JOIN factura_venta f ON (f.num_fac = 'FABCD001');

SELECT t.pro_mod || ' es el modelo de la marca: ' || p.marca || ' con un total de: ' |
| f.total "Compra"
FROM producto p
JOIN ticket t ON (p.modelo = t.pro_mod)
JOIN factura_venta f ON (f.num_fac = 'FABCD003');

/* Consultas a 3 tablas con relación uno a muchos */

SELECT * FROM departamento;
SELECT * FROM producto;
SELECT * FROM entrega;

SELECT d.nombre, p.marca, e.id_envio
FROM departamento d
JOIN producto p ON (d.numero_linea = p.depnum)
JOIN entrega e ON (p.modelo = e.pro_mod);

SELECT d.encargado || ' es el encargado de el numero de departamento: ' || p.depnum || 
' con un folio de: ' || e.pro_fol "Encargado"
FROM departamento d
JOIN producto p ON (d.numero_linea = p.depnum)
JOIN entrega e ON (p.modelo = e.pro_mod);

SELECT d.numero_empleados || ' son el número de empleados que trabajan en el numero de 
departamento:' || p.depnum || ' con un folio de: ' || e.pro_fol "Empleados"
FROM departamento d
JOIN producto p ON (d.numero_linea = p.depnum)
JOIN entrega e ON (p.modelo = e.pro_mod);

SELECT CONSULTAS PARA PROCESOS

/* Consultas que resulvan facturación, inventarios, ventas, nomina, etc */

SELECT * FROM paqueteria;
SELECT * FROM entrega;
SELECT * FROM ticket;

SELECT p.tarifa || ' es la tarifa mas el costo de ' || e.costo || ' mas el iva de ' || 
t.iva 
|| ' tenemos un total a pagar de: ' || (p.tarifa + e.costo + t.iva) "Total a pagar"
FROM paqueteria p
JOIN entrega e ON (p.id_paqueteria = e.paq_id)
JOIN ticket t ON (iva = 1.16);

SELECT * FROM cliente;
SELECT * FROM factura_venta;
SELECT * FROM ticket;

SELECT c.nombre || ' su compra tiente el total de ' || f.total || ' mas el iva de ' || 
t.iva || ' tenemos un precio final de:' || (f.total + t.iva) 
|| ' pesos mexicanos' "Total Compra"
FROM cliente c
JOIN factura_venta f ON (c.rfc = f.cli_rfc)
JOIN ticket t ON (t.iva = 1.16);

SELECT * FROM proveedores;
SELECT * FROM factura_compra;

SELECT p.nombre || ' es el proveedor con un credito de ' || p.credito || ' y un subtot
al de inversion de '
|| f.subtotal || ' el precio final a pagar es: ' || (f.subtotal + f.iva) " Facturacion
"
FROM proveedores p
JOIN factura_compra f ON (p.id_pro = f.prov_id); 

Por último, cabe mencionar que se anexan los códigos con su respectivo
archivo LST para documentar cada paso de los comandos realizados en
este reporte y así observar que cada comando fue ejecutado
correctamente

BIBLIOGRAFIA

 Fundamentos y Modelos de Bases de Datos, 2ª Edición, De Miguel y Piattini, RA-MA,


1999. (Capítulo14)
 Fundamentos de Sistemas de Bases de Datos, 5ª Edición, Elmasri y Navathe, Addison
Wesley, 2007. (Capítulo 23)
 Oracle 9i: Administración y Análisis de Bases de Datos. César Pérez. RA-MA. 2002.
(Capítulos 14, 15 y 18)
 Oracle 10g: Administración y Análisis de Bases de Datos. César Pérez. RA-MA. 2005.
(Capítulos 15, 16 y 20)
 Documentación de Oracle online:
o En General:
http://www.oracle.com/technology/documentation/oracle9i_arch_901.html
o Sobre Administración: http://download-
uk.oracle.com/docs/html/A95906_01/toc.htm. Todas las imágenes de estas
trasparencias se han extraído de esta documentación.
o Comandos SQL y PL/SQL:
http://tahiti.oracle.com/pls/db901/db901.sql_keywords

También podría gustarte