109 - Vistas modificar (alter view) |
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;