109 - Vistas modificar (alter view)


Primer problema:
Un club dicta cursos de distintos deportes. Almacena la información en varias tablas.
1- Elimine las tabla "inscriptos", "socios" y "cursos", si existen:
 if object_id('inscriptos') is not null  
  drop table inscriptos;
 if object_id('socios') is not null  
  drop table socios;
 if object_id('cursos') is not null  
  drop table cursos;

2- Cree las tablas:
 create table socios(
  documento char(8) not null,
  nombre varchar(40),
  domicilio varchar(30),
  constraint PK_socios_documento
   primary key (documento)
 );

 create table cursos(
  numero tinyint identity,
  deporte varchar(20),
  dia varchar(15),
   constraint CK_inscriptos_dia check (dia in('lunes','martes','miercoles','jueves','viernes','sabado')),
  profesor varchar(20),
  constraint PK_cursos_numero
   primary key (numero),
 );

 create table inscriptos(
  documentosocio char(8) not null,
  numero tinyint not null,
  matricula char(1),
  constraint PK_inscriptos_documento_numero
   primary key (documentosocio,numero),
  constraint FK_inscriptos_documento
   foreign key (documentosocio)
   references socios(documento)
   on update cascade,
  constraint FK_inscriptos_numero
   foreign key (numero)
   references cursos(numero)
   on update cascade
  );

3- Ingrese algunos registros para todas las tablas:
 insert into socios values('30000000','Fabian Fuentes','Caseros 987');
 insert into socios values('31111111','Gaston Garcia','Guemes 65');
 insert into socios values('32222222','Hector Huerta','Sucre 534');
 insert into socios values('33333333','Ines Irala','Bulnes 345');

 insert into cursos values('tenis','lunes','Ana Acosta');
 insert into cursos values('tenis','martes','Ana Acosta');
 insert into cursos values('natacion','miercoles','Ana Acosta');
 insert into cursos values('natacion','jueves','Carlos Caseres');
 insert into cursos values('futbol','sabado','Pedro Perez');
 insert into cursos values('futbol','lunes','Pedro Perez');
 insert into cursos values('basquet','viernes','Pedro Perez');

 insert into inscriptos values('30000000',1,'s');
 insert into inscriptos values('30000000',3,'s');
 insert into inscriptos values('30000000',6,null);
 insert into inscriptos values('31111111',1,'n');
 insert into inscriptos values('31111111',4,'s');
 insert into inscriptos values('32222222',1,'n');
 insert into inscriptos values('32222222',7,'n');

4- Elimine la vista "vista_deudores" si existe:
 if object_id('vista_deudores') is not null
  drop view vista_deudores;

5- Cree la vista "vista_deudores" que muestre el documento y nombre del socio, el deporte, el día y 
la matrícula, de todas las inscripciones no pagas colocando "with check option".

6- Consulte la vista:
 select * from vista_deudores;

7- Veamos el texto de la vista.

8- Intente actualizar a "s" la matrícula de una inscripción desde la vista.
No lo permite por la opción "with check option".

9- Modifique el documento de un socio mediante la vista.

10- Vea si se alteraron las tablas referenciadas en la vista:
 select * from socios;
 select * from inscriptos;

11- Modifique la vista para que muestre el domicilio, coloque la opción de encriptación y omita 
"with check option".

12- Consulte la vista para ver si se modificó:
 select * from vista_deudores;
Aparece el nuevo campo.

13- Vea el texto de la vista.
No lo permite porque está encriptada.

14- Actualice la matrícula de un inscripto.
Si se permite porque la opción "with check option" se quitó de la vista.

15- Consulte la vista:
 select * from vista_empleados;
Note que el registro modificado ya no aparece porque la matrícula está paga.

16- Elimine la vista "vista_socios" si existe:
 if object_id('vista_socios') is not null
  drop view vista_socios;

17- Cree la vista "vista_socios" que muestre todos los campos de la tabla "socios".

18- Consulte la vista.

19- Agregue un campo a la tabla "socios".

20- Consulte la vista "vista_socios".
El nuevo campo agregado a "socios" no aparece, pese a que la vista indica que muestre todos los 
campos de dicha tabla.

21- Altere la vista para que aparezcan todos los campos.

22- Consulte la vista.
Ver solución

 if object_id('inscriptos') is not null  
  drop table inscriptos;
 if object_id('socios') is not null  
  drop table socios;
 if object_id('cursos') is not null  
  drop table cursos;

 create table socios(
  documento char(8) not null,
  nombre varchar(40),
  domicilio varchar(30),
  constraint PK_socios_documento
   primary key (documento)
 );

 create table cursos(
  numero tinyint identity,
  deporte varchar(20),
  dia varchar(15),
   constraint CK_inscriptos_dia check (dia in('lunes','martes','miercoles','jueves','viernes','sabado')),
  profesor varchar(20),
  constraint PK_cursos_numero
   primary key (numero),
 );

 create table inscriptos(
  documentosocio char(8) not null,
  numero tinyint not null,
  matricula char(1),
  constraint PK_inscriptos_documento_numero
   primary key (documentosocio,numero),
  constraint FK_inscriptos_documento
   foreign key (documentosocio)
   references socios(documento)
   on update cascade,
  constraint FK_inscriptos_numero
   foreign key (numero)
   references cursos(numero)
   on update cascade
  );

 insert into socios values('30000000','Fabian Fuentes','Caseros 987');
 insert into socios values('31111111','Gaston Garcia','Guemes 65');
 insert into socios values('32222222','Hector Huerta','Sucre 534');
 insert into socios values('33333333','Ines Irala','Bulnes 345');

 insert into cursos values('tenis','lunes','Ana Acosta');
 insert into cursos values('tenis','martes','Ana Acosta');
 insert into cursos values('natacion','miercoles','Ana Acosta');
 insert into cursos values('natacion','jueves','Carlos Caseres');
 insert into cursos values('futbol','sabado','Pedro Perez');
 insert into cursos values('futbol','lunes','Pedro Perez');
 insert into cursos values('basquet','viernes','Pedro Perez');

 insert into inscriptos values('30000000',1,'s');
 insert into inscriptos values('30000000',3,'s');
 insert into inscriptos values('30000000',6,null);
 insert into inscriptos values('31111111',1,'n');
 insert into inscriptos values('31111111',4,'s');
 insert into inscriptos values('32222222',1,'n');
 insert into inscriptos values('32222222',7,'n');

 if object_id('vista_deudores') is not null
  drop view vista_deudores;

 create view vista_deudores
 as
  select documento,nombre,c.deporte,c.dia,matricula
  from socios as s
  join inscriptos as i
  on documento=documentosocio
  join cursos as c
  on c.numero=i.numero
  where matricula='n'
  with check option;

 select *from vista_deudores;

 sp_helptext vista_deudores;

 update vista_deudores set matricula='s' where documento='31111111';

 update vista_deudores set documento='31111113' where documento='31111111';

 select *from socios;
 select *from inscriptos;

 alter view vista_deudores
  with encryption
 as
  select documento,nombre,domicilio,c.deporte,c.dia,matricula
  from socios as s
  join inscriptos as i
  on documento=documentosocio
  join cursos as c
  on c.numero=i.numero
  where matricula='n';

 select *from vista_deudores;

 sp_helptext vista_deudores;

 update vista_deudores set matricula='s' where documento='31111113';

 select *from vista_empleados;

 if object_id('vista_socios') is not null
  drop view vista_socios;

 create view vista_socios
 as
  select *from socios;

 select *from vista_socios;

 alter table socios
 add telefono char(10);

 select *from vista_socios;

 alter view vista_socios
 as
  select *from socios;

 select *from vista_socios; 



 

Retornar