Ing. Ronald Chambi Inca
Integridad de Datos Ejercicio 4.1.- Para realizar los ejercicios de este capítulo necesitamos crear las siguientes tablas en las base de datos BdEjemplo_02 Ejecutar el sigueinte script create database BdEjemplo_02 Luego Ejecutar el siguiente script USE BdEjemplo_02 GO --Creacion de la Tabla CATEGORIA IF EXISTS (SELECT * FROM SysObjects WHERE Type Type= ='U' and Name Name= ='Categoria' 'Categoria') ) DROP TABLE Categoria CREATE TABLE Categoria ( nom_cat VarChar( VarChar (50) 50) NULL, ) --Creacion de la Tabla ARTÍCULO IF EXISTS (SELECT * FROM SysObjects WHERE Type Type= ='U' and Name Name= ='Articulo' 'Articulo') ) DROP TABLE Articulo CREATE TABLE Articulo ( IdArticulo VarChar VarChar( (12) 12) NOT NULL, Modelo VarChar( VarChar (50) 50) NOT NULL, Plataforma VarChar( VarChar (50), 50), Caracteristicas VarChar( VarChar (350) 350) NOT NULL, pre_arti Decimal( Decimal (12, 12,2)NOT NULL, stock_arti Integer NOT NULL, IdCategoria Integer ) --Creacion de la Tabla DISTRITO IF EXISTS (SELECT * FROM SysObjects WHERE Type Type= ='U' and Name Name= ='Distrito' 'Distrito') ) DROP TABLE Distrito CREATE TABLE Distrito ( IdDistrito VarChar VarChar( (3) NOT NULL, nom_dis VarChar( VarChar (30) 30) NOT NULL, iniciales Char( Char (3) NOT NULL, ) --Creacion de la Tabla USUARIO IF EXISTS (SELECT * FROM SysObjects WHERE Type Type= ='U' and Name Name= ='Usuario' 'Usuario') ) DROP TABLE Usuario CREATE TABLE Usuario ( IdUsuario Char( Char (5) NOT NULL, nom_usu VarChar( VarChar (20) 20) NOT NULL,
Ing. Ronald Chambi Inca ape_usu VarChar(20) NOT NULL, dir_usu VarChar(50) NOT NULL, tel_usu VarChar(8), clave VarChar(5) NOT NULL, IdDistrito VarChar(3), ) --Creacion de la Tabla CLIENTE IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name='Cliente') DROP TABLE Cliente CREATE TABLE Cliente ( IdCliente VarChar(8) NOT NULL, nom_cli VarChar(50) NOT NULL, ape_cli VarChar(50) NOT NULL, dir_cli VarChar(100) NOT NULL, tel_cli VarChar(8), Ruc_cli Varchar(15), DNI_cli Varchar(8) NULL, Email_cli Varchar(50), IdDistrito VarChar(3), ) --Creacion de la Tabla EncabezadoFactura IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name= 'EncabezadoFactura') DROP TABLE EncabezadoFactura CREATE TABLE EncabezadoFactura ( IdEnFac VarChar(10) NOT NULL, IGV Decimal(12,2) NOT NULL, SubTotal_Fac Decimal(12,2) NOT NULL, Anulado Char(1), Transferido Char(1), Desc_Fac VarChar(50), IdCliente VarChar(8) ) --Creacion de la Tabla DetalleFactura IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name= 'DetalleFactura') DROP TABLE DetalleFactura CREATE TABLE DetalleFactura ( IdEnFac VarChar(10) NOT NULL, Cant_det Integer NOT NULL, Prec_det Decimal(12,2) NOT NULL, Importe Decimal(12,2) NOT NULL, IdArticulo VarChar(12) NOT NULL )
Ing. Ronald Chambi Inca Ejercicio 4.2.- El siguiente ejemplo muestra la creación de una restricción
primary key sobre la columna IdDistrito de la tabla Distrito en la base de datos BdEjemplo_02. USE BdEjemplo_02 GO /* Tabla DISTRITO */ -- Si existe el objeto cons_00 lo borramos IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_00') ALTER TABLE Distrito -- eliminamos el constraint DROP CONSTRAINT cons_00 GO ALTER TABLE Distrito -- se crea el constraint cons_00 ADD CONSTRAINT cons_00 PRIMARY KEY (IdDistrito ) GO
Ejercicio 4.3.- Ejecutar el siguiente Script que permite ingresar registros a la
tabla. El último registro duplica el IdDistrito(Observe el mensaje de error). USE BDEjemplo_02 GO INSERT Distrito VALUES ('L11','JESUS MARIA','JMA') INSERT Distrito VALUES ('L21','PUEBLO LIBRE','PLI') INSERT Distrito VALUES ('L27','SAN ISIDRO','SIS') INSERT Distrito VALUES ('L28','INDEPENDENCIA','IND') INSERT Distrito VALUES ('L35','VILLA MARIA DELTRIUNFO','VMA') INSERT Distrito VALUES ('L39','LOS OLIVOS','LOL') /* Duplicar el Código de Distrito */ INSERT Distrito VALUES ('L39','LOS OLIVOS','LOL')
Ejercicio 4.4.- En el siguiente ejemplo muestra la creación de una restricción
PRIMARY KEY sobre la columna IdCliente de la tabla Cliente en la base de datos BDEjemplo_02. USE BdEjemplo_02 GO /* Tabla CLIENTE */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_02') ALTER TABLE Cliente DROP CONSTRAINT cons_02 GO ALTER TABLE Cliente ADD CONSTRAINT cons_02 GO
PRIMARY KEY (IdCliente)
Ing. Ronald Chambi Inca Ejercicio 4.5.- Para verificar la creación de la restricción Primary Key ejecutar
el procedimiento almacenado sp_helpconstraint como se muestra a continuación:
USE BdEjemplo_02 GO EXEC sp_helpconstraint Cliente
Ejercicio 4.6.- A continuación ingresaremos algunos registros para verificar la
restricción PRIMARY KEY en la tabla Cliente base de datos BdEjemplo_02. USE BdEjemplo_02 GO INSERT Cliente VALUES ('CLI_0001','Jonathan', 'Jaramillo Wong', 'Julio C. Tello 513', '283-5881','','', '
[email protected]', 'L35') /* Duplicar el Código de Cliente */ INSERT Cliente VALUES ('CLI_0001','Janeth', 'Zevallos Salazar', 'Julio C. Tello 513', '952-5668','','', '
[email protected]', 'L35')
Ejercicio 4.7.- El siguiente ejemplo muestra la creación de una restricción
UNIQUE sobre la columna DNI_Cli de la tabla Cliente en la base de datos BdEjemplo_02. USE BdEjemplo_02 GO /* Tabla CLIENTE */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_03') ALTER TABLE Cliente DROP CONSTRAINT cons_03 GO ALTER TABLE Cliente ADD CONSTRAINT Cons_03 UNIQUE (DNI_Cli) GO
Ejercicio 4.8.- A continuación ingresaremos algunos registros para verificar la
restricción UNIQUE en la tabla Cliente base de datos BdEjemplo_02. USE BdEjemplo_02 GO INSERT Cliente VALUES ('CLI_0002', 'Henry', 'Aguilar Wong', 'Confraternidad 561', '952-8754', '','40301589', '
[email protected]', 'L39') /* Duplicar el DNI del Cliente */ INSERT Cliente VALUES ('CLI_0002', 'Jackelin', 'De la Peña Ruiz', 'Jr. Cuzo 681', '952-8754', '','40301589', '
[email protected]', 'L28')
Ing. Ronald Chambi Inca
Ejercicio 4.9.- El siguiente ejemplo muestra la creación de una restricción
IDENTITY sobre la columna IdCategoria de la tabla categoría en la base de datos BdEjemplo_02. USE BdEjemplo_02 GO /* Tabla CATEGORIA */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_15') ALTER TABLE Categoria DROP CONSTRAINT cons_15 GO ALTER TABLE Categoria ADD IdCategoria Int IDENTITY(1,1) CONSTRAINT cons_15 PRIMARY KEY (IdCategoria) GO
Ejercicio 4.10.- A continuación ingresamos algunos registros para verificar la restricción IDENTITY en la tabla Categoría base de datos BdEjemplo_02. Observe que el IdCategoria se crea automaticamente con un incremento de 1. USE BdEjemplo_02 GO Insert Insert Insert Insert Insert Insert GO SELECT
Categoria Categoria Categoria Categoria Categoria Categoria * FROM
Values Values Values Values Values Values
('Camaras digitales') ('Joysticks') ('Mouse') ('Tableros Digitalizadores') ('Value Pack') ('Scaners')
Categoria
Ejercicio 4.11.- El siguiente ejemplo muestra la creación de una restricción
CHECK sobre la columna iníciales de la tabla Distrito en la base de datos BdEjemplo_02. USE BdEjemplo_02 GO /* Tabla DISTRITO */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_01') ALTER TABLE Distrito DROP CONSTRAINT cons_01 GO ALTER TABLE Distrito WITH NOCHECK ADD CONSTRAINT cons_01 CHECK (iniciales NOT LIKE '%[0-9]%')
Ing. Ronald Chambi Inca GO
Ejercicio 4.12.- A continuación ingresamos algunos registros para verificar la
restricción CHECK en la tabla Distrito base de datos BdEjemplo_02. USE BdEjemplo_02 GO INSERT Distrito VALUES ('L01','LIMA(CERCADO)','123')
Ejercicio 4.13.- El siguiente ejemplo muestra la creación de una restricción
FOREIGN KEY sobre la columna IdDistrito de la tabla Usuario en la base de datos BdEjemplo_02. USE BdEjemplo_02 GO /* Tabla CLIENTE */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_04') ALTER TABLE Cliente DROP CONSTRAINT cons_04 GO ALTER TABLE Cliente ADD CONSTRAINT cons_04 FOREIGN KEY (IdDistrito) (IdDistrito) GO
REFERENCES Distrito
Ejercicio 4.14.- A continuación ingresamos algunos registros para verificar la restricción FOREIGN KEY en la tabla Clientes de la base de datos BdEjemplo_02.
Ingresamos un IdDistrito que no existe en la tabla Distrito y observe el mensaje de error. USE BdEjemplo_02 GO /* Código de Distrito no existe en la tabla Distrito */ INSERT Cliente VALUES ('CLI_0004', 'Lucy', 'Quispe Cruz', 'Las Palmeras 1314', '352-8754', '','41871589', '
[email protected]', 'L59')
Ejercicio 4.15.- El siguiente ejemplo muestra la creación de una restricción
FOREIGN KEY sobre la columna IdDistrito de la tabla usuario en la base de datos BdEjemplo_02. USE BdEjemplo_02 GO /* Tabla ARTICULO */
Ing. Ronald Chambi Inca IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_17') ALTER TABLE Articulo DROP CONSTRAINT cons_17 GO ALTER TABLE Articulo ADD CONSTRAINT cons_17 FOREIGN KEY (IdCategoria) REFERENCES Categoria (IdCategoria) GO Ejercicio 4.16.- Ejecutar el procedimiento almacenado sp_helpconstraint para
verificar la existencia de las restricciones en la tabla usuario. USE BdEjemplo_02 GO EXEC sp_helpconstraint Usuario
Ejercicio 4.17.- El siguiente ejemplo muestra la creación de una restricción
DEFAULT sobre la columna Fech_Fac de la tabla EncabezadoFactura en la base de datos BdEjemplo_02. La restricción carga la fecha del sistema a la columna Fech_fac. USE BdEjemplo_02 GO /* Tabla ENCABEZADO FACTURA */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_09') ALTER TABLE EncabezadoFactura DROP CONSTRAINT cons_09 GO ALTER TABLE EncabezadoFactura ADD Fech_Fac Datetime CONSTRAINT cons_09 DEFAULT getdate()
Ejercicio 4.18.- A continuación ingresaremos algunos registros para verificar
la restricción DEFAULT en la tabla
EncabezadoFactura
base de datos
BdEjemplo_02. USE BdEjemplo_02 GO INSERT INTO EncabezadoFactura VALUES ('0000000001', 90.00, 500.00, 'N', 'N', 0.00, 'CLI_0001', DEFAULT) GO SELECT * FROM EncabezadoFactura
Ing. Ronald Chambi Inca
Ejercicio 4.19.- Antes de continuar con el ejemplo verificar haber realizado
todas restricciones correspondientes a la base de datos BdEjemplo_02. Si se encuentra activado el administrador corporativo debe cerrarlo (en el caso de que este en uso la base de datos BdEjemplo_02). USE Master GO IF EXISTS(SELECT * FROM SYSDATABASES WHERE name= 'BDEjemplo_02') BEGIN DROP DATABASE BDEjemplo_02 END GO -- Crear la base de datos CREATE DATABASE BDEjemplo_02 GO -- Crear las tablas USE BdEjemplo_02 GO --Creacion de la Tabla CATEGORIA IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name='Categoria') DROP TABLE Categoria CREATE TABLE Categoria ( nom_cat VarChar(50) NULL, ) --Creacion de la Tabla ARTÍCULO IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name='Articulo') DROP TABLE Articulo CREATE TABLE Articulo ( IdArticulo VarChar(12) NOT NULL, Modelo VarChar(50) NOT NULL, Plataforma VarChar(50), Caracteristicas VarChar(350) NOT NULL, pre_arti Decimal(12,2)NOT NULL, stock_arti Integer NOT NULL, IdCategoria Integer ) --Creacion de la Tabla DISTRITO
Ing. Ronald Chambi Inca IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name='Distrito') DROP TABLE Distrito CREATE TABLE Distrito ( IdDistrito VarChar(3) NOT NULL, nom_dis VarChar(30) NOT NULL, iniciales Char(3) NOT NULL, ) --Creacion de la Tabla USUARIO IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name='Usuario') DROP TABLE Usuario CREATE TABLE Usuario ( IdUsuario Char(5) NOT NULL, nom_usu VarChar(20) NOT NULL, ape_usu VarChar(20) NOT NULL, dir_usu VarChar(50) NOT NULL, tel_usu VarChar(8), clave VarChar(5) NOT NULL, IdDistrito VarChar(3), ) --Creacion de la Tabla CLIENTE IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name='Cliente') DROP TABLE Cliente CREATE TABLE Cliente ( IdCliente VarChar(8) NOT NULL, nom_cli VarChar(50) NOT NULL, ape_cli VarChar(50) NOT NULL, dir_cli VarChar(100) NOT NULL, tel_cli VarChar(8), Ruc_cli Varchar(15), DNI_cli Varchar(8) NULL, Email_cli Varchar(50), IdDistrito VarChar(3), ) --Creacion de la Tabla EncabezadoFactura IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name= 'EncabezadoFactura') DROP TABLE EncabezadoFactura CREATE TABLE EncabezadoFactura ( IdEnFac VarChar(10) NOT NULL, IGV Decimal(12,2) NOT NULL, SubTotal_Fac Decimal(12,2) NOT NULL, Anulado Char(1), Transferido Char(1), Desc_Fac VarChar(50), IdCliente VarChar(8) ) --Creacion de la Tabla DetalleFactura
Ing. Ronald Chambi Inca IF EXISTS (SELECT * FROM SysObjects WHERE Type='U' and Name= 'DetalleFactura') DROP TABLE DetalleFactura CREATE TABLE DetalleFactura ( IdEnFac VarChar(10) NOT NULL, Cant_det Integer NOT NULL, Prec_det Decimal(12,2) NOT NULL, Importe Decimal(12,2) NOT NULL, IdArticulo VarChar(12) NOT NULL ) -- Crear las Restricciones USE BdEjemplo_02 GO /* Tabla CATEGORIA */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_15') ALTER TABLE Categoria DROP CONSTRAINT cons_15 GO ALTER TABLE Categoria ADD IdCategoria Int IDENTITY(1,1) CONSTRAINT cons_15 PRIMARY KEY (IdCategoria) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_16') ALTER TABLE Categoria DROP CONSTRAINT cons_16 GO ALTER TABLE Categoria ADD FechaIngreso Datetime CONSTRAINT cons_16 DEFAULT getdate() / *----------------------------------------------------------------------------*/ /* Tabla ARTICULO */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_07') ALTER TABLE Articulo DROP CONSTRAINT cons_07 GO ALTER TABLE Articulo ADD CONSTRAINT cons_07 PRIMARY KEY (IdArticulo) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_17') ALTER TABLE Articulo DROP CONSTRAINT cons_17 GO ALTER TABLE Articulo ADD CONSTRAINT cons_17 FOREIGN KEY (IdCategoria) (IdCategoria) GO
REFERENCES Categoria
Ing. Ronald Chambi Inca / *----------------------------------------------------------------------------*/ /* Tabla DISTRITO */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_00') ALTER TABLE Distrito DROP CONSTRAINT cons_00 GO ALTER TABLE Distrito ADD CONSTRAINT cons_00 PRIMARY KEY (IdDistrito ) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_01') ALTER TABLE Distrito DROP CONSTRAINT cons_01 GO ALTER TABLE Distrito WITH NOCHECK ADD CONSTRAINT cons_01 CHECK (iniciales NOT LIKE '%[0-9]%') GO / *----------------------------------------------------------------------------*/ /* Tabla CLIENTE */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_02') ALTER TABLE Cliente DROP CONSTRAINT cons_02 GO ALTER TABLE Cliente ADD CONSTRAINT cons_02 PRIMARY KEY (IdCliente) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_03') ALTER TABLE Cliente DROP CONSTRAINT cons_03 GO ALTER TABLE Cliente ADD CONSTRAINT Cons_03 UNIQUE (DNI_Cli) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_04') ALTER TABLE Cliente DROP CONSTRAINT cons_04 GO ALTER TABLE Cliente ADD CONSTRAINT cons_04 FOREIGN KEY (IdDistrito) REFERENCES Distrito (IdDistrito) GO / *----------------------------------------------------------------------------*/ /* Tabla USUARIO */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_05') ALTER TABLE Usuario DROP CONSTRAINT cons_05
Ing. Ronald Chambi Inca GO ALTER TABLE Usuario ADD CONSTRAINT cons_05 GO
PRIMARY KEY (IdUsuario)
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_06') ALTER TABLE Usuario DROP CONSTRAINT cons_06 GO ALTER TABLE Usuario ADD CONSTRAINT cons_06 FOREIGN KEY (IdDistrito) REFERENCES Distrito (IdDistrito) GO / *----------------------------------------------------------------------------*/ /* Tabla ENCABEZADO FACTURA */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_08') ALTER TABLE EncabezadoFactura DROP CONSTRAINT cons_08 GO ALTER TABLE EncabezadoFactura ADD CONSTRAINT cons_08 PRIMARY KEY (IdEnFac) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_09') ALTER TABLE EncabezadoFactura DROP CONSTRAINT cons_09 GO ALTER TABLE EncabezadoFactura ADD Fech_Fac Datetime CONSTRAINT cons_09 DEFAULT getdate() IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_10') ALTER TABLE EncabezadoFactura DROP CONSTRAINT cons_10 GO ALTER TABLE EncabezadoFactura ADD CONSTRAINT cons_10 FOREIGN KEY(IdCliente) REFERENCES Cliente (IdCliente) GO / *----------------------------------------------------------------------------*/ /* Tabla DETALLE FACTURA */ IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_11') ALTER TABLE DetalleFactura DROP CONSTRAINT cons_11 GO ALTER TABLE DetalleFactura ADD CONSTRAINT cons_11 FOREIGN KEY(IdEnFac) REFERENCES EncabezadoFactura (IdEnFac) GO IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_12') ALTER TABLE DetalleFactura
Ing. Ronald Chambi Inca DROP CONSTRAINT cons_12 GO ALTER TABLE DetalleFactura ADD CONSTRAINT cons_12 FOREIGN KEY(IdArticulo) (IdArticulo) GO
REFERENCES Articulo
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'cons_14') ALTER TABLE DetalleFactura DROP CONSTRAINT cons_14 GO ALTER TABLE DetalleFactura ADD CONSTRAINT cons_14 PRIMARY KEY(IdEnFac, IdArticulo) GO