Infomatica

Solo disponible en BuenasTareas
  • Páginas : 10 (2470 palabras )
  • Descarga(s) : 0
  • Publicado : 8 de marzo de 2013
Leer documento completo
Vista previa del texto
EJEMPLOS PRÁCTICOS SQL

EJEMPLOS PRÁCTICOS SQL
INTEGRIDAD REFERENCIAL INTEGRIDAD REFERENCIAL

DROP SCHEMA IF EXISTS Tablas1; CREATE SCHEMA Tablas1; USE Tablas1;

create table Cliente( Dni VARCHAR(10), Nombre VARCHAR(10), Apellido VARCHAR(10), p ( ), PRIMARY KEY (Dni) )ENGINE=InnoDB; create table Pedidos( npedido INTEGER, fecha DATE, Cantidad DOUBLE, cliente_Dni VARCHAR(10), PRIMARY KEY(npedido), ( did ) FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni)

) )ENGINE=InnoDB; ;

INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez'); INSERT INTO Pedidos VALUES ('122','2010/01/05',7,'7211545v'); ( 122 2010/01/05 7 7211545v );

TABLA: Cliente

TABLA: Pedidos

Esto es un ejemplo de intento de borrado de una tupla que tiene un campo que aparece como clave foráneaen otra tabla. Por omision se aplica la condición de restrict y no se puede borrar hasta que no borre la tupla de la tabla hija.

Esto es un ejemplo de intento de actualización de una tupla que tiene un campo que aparece como clave foránea en otra tabla. Por omision se aplica la condición de restrict y no se puede actualizar.

DROP SCHEMA IF EXISTS Tablas2; CREATE SCHEMA Tablas2; USETablas2;

create table Cliente( Dni VARCHAR(10), Nombre VARCHAR(10), Apellido VARCHAR(10), PRIMARY KEY (Dni) )ENGINE=InnoDB;

create table Pedidos( npedido INTEGER, fecha DATE, Cantidad DOUBLE, cliente_Dni VARCHAR(10), cliente Dni VARCHAR(10) PRIMARY KEY (npedido), FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON DELETE CASCADE ON UPDATE CASCADE )ENGINE=InnoDB;

INSERT INTO Cliente VALUES('7211545v','Carlos','Martinez Lopez'); INSERT INTO Pedidos VALUES ('122','2010/01/05',7,'7211545v');

TABLA: Cliente

TABLA: Pedidos

Para probar la restricción ON UPDATE CASCADE … actualizamos el valor p de un DNI. El resultado debe de ser que se actualiza la tabla padre y la hija

Se observa que se han actualizado las tablas padre e hija

Si ahora borramos una tupla de la tabla padrese borra la tupla correspondiente de la tabla hija.

DROP SCHEMA IF EXISTS Tablas3; CREATE SCHEMA Tablas3; USE Tablas3;

create table Cliente( Dni VARCHAR(10), Nombre VARCHAR(10), Apellido VARCHAR(10), PRIMARY KEY (Dni) )ENGINE=InnoDB; create table Pedidos( npedido INTEGER, fecha DATE, Cantidad DOUBLE, cliente_Dni VARCHAR(10), cliente Dni VARCHAR(10) PRIMARY KEY (npedido), FOREIGN KEY(cliente_Dni) REFERENCES Cliente(Dni) ON DELETE RESTRICT ON UPDATE CASCADE

)ENGINE=InnoDB; )ENGINE I DB

INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez'); INSERT INTO Pedidos VALUES ('122','2010/01/05',7,'7211545v');

La restricción más adecuada en la mayoría de los casos es evitar realizar borrados en cascada y sin embargo si actualizar en cascada

Observamos que laactualización en cascada ha funcionado

A diferencia del ejemplo de la Tablas2 ahora no se puede borrar una tupla de la tabla padre por la restricción ON DELETE RESTRICT.

Nótese una cuestión que a veces es causa de confusión. Aunque es en la tabla hija donde se escribe la restricción de la clave foránea foránea, es decir, que un atributo depende de la clave de otra tabla…. Se puede borrar sin ningúnproblema una tupla de una tabla que contiene una clave foránea sin afectar a la tupla correspondiente de la tabla padre… En la figura se ve el ejemplo de borrar una fila en la tabla de pedidos.

Como se ve en la figura la tabla de pedidos está vacía y la tabla de clientes está intacta. intacta

DROP SCHEMA IF EXISTS Tablas4; CREATE SCHEMA Tablas4; USE Tablas4;

create table Cliente( DniVARCHAR(10), Nombre VARCHAR(10), Apellido VARCHAR(10), PRIMARY KEY (Dni) )ENGINE=InnoDB;

create table Pedidos( npedido INTEGER, fecha DATE, Cantidad DOUBLE, cliente_Dni VARCHAR(10), PRIMARY KEY (npedido), ( p ), FOREIGN KEY (cliente_Dni) REFERENCES Cliente(Dni) ON DELETE RESTRICT ON UPDATE CASCADE )ENGINE=InnoDB;

INSERT INTO Cliente VALUES ('7211545v','Carlos','Martinez Lopez'); INSERT INTO...
tracking img