En algunos casos, sobre todo en bases de datos de prueba, es necesario desactivar las restricciones de alguna tabla para poder realizar algunas pruebas, y, aunque las restricciones nos sirven precisamente para guardar la integridad de la información, habrá algunos casos especiales en que necesitemos brincarnos la protección.
La pregunta siguiente que nos pudiéramos hacer sería ¿necesito borrar las restricciones mediante el comando DROP en las tablas?, pues la respuesta llanamente sería que si, definitivamente es una manera de hacerlo, pero no la más optima pues es el camino más largo, otra opción es con las restricciones de la tabla on delete cascade, pero también serías mas tardada, aquí les mostraré la manera de desactivar temporalmente las restricciones de llaves foráneas.
Voy a suponer en este post, que ya se tiene conocimiento de las llaves foráneas, de lo contrario pueden entrar en el siguiente enlace Relaciones entre tablas.
Pero vamos a entrar en materia y hacer la práctica, que es lo que nos gusta y como aprendemos.
Primeramente comenzaremos por crear en caso de que no este creada, la base de datos, posteriormente crearemos tres tablas, una de usuarios, otra de categorías y otra de post, simulando un blog. Llenaremos rápidamente las tablas y trataremos de borrar información de alguna tabla con restricciones.
Creando base de datos, tablas y datos
CREATE DATABASE PRUEBAS
GO
use PRUEBAS
go
CREATE TABLE USUARIOS(
user_id int primary key identity,
nombre varchar(max))
CREATE TABLE CATEGORIAS(
categoria_id int
primary key identity,
nombre varchar(max))
CREATE TABLE POSTS(
post_id int primary key identity,
user_id int,
categoria_id int,
titulo varchar(200),
contenido varchar(max))
ALTER TABLE POSTS ADD constraint user_id
FOREIGN KEY (user_id) references USUARIOS (user_id)
ALTER TABLE POSTS ADD constraint categoria_id FOREIGN
KEY (categoria_id) references
CATEGORIAS (categoria_id)
insert into USUARIOS (nombre) values ('Emmanuel Urias')
GO
insert into CATEGORIAS (nombre) values ('SQL_SERVER')
GO
INSERT INTO POSTS (user_id, categoria_id, titulo, contenido) values (1,1,'DESACTIVAR
FK', 'CONTENIDO DEL POST');
Borrando información de tablas con restricción
USE PRUEBAS
GO
delete from CATEGORIAS
Al ejecutar el script vemos que obtenemos el siguiente error:
Msg 547, Level 16, State 0, Line 3
The DELETE statement conflicted with
the REFERENCE constraint "categoria_id". The conflict occurred in
database "PRUEBAS", table "dbo.POSTS", column
'categoria_id'.
The statement has been terminated.
No se puede eliminar la tabla, debido a que existen post apuntando a esa categoría, por lo cual, vamos a proceder a desactivar las llaves foráneas de la tabla de POST, pues de esa tabla depende el ejercicio.
alter table dbo.POSTS NOCHECK constraint ALL --Desactivar
delete from CATEGORIAS
(1 row(s) affected)
alter table dbo.POSTS CHECK constraint ALL --Activar
Hasta aquí el post, espero que haya sido de su agrado y de utilidad, espero compartan, comenten, pregunten o den clic a algún anuncio de su interes.
Saludos
No hay comentarios.:
Publicar un comentario