Está en la página 1de 4

Ejercicios Restricciones Movie-Ratings Ejercicio 1 Modificar los tres CREATE TABLE en la base de datos movie-rating y agregar las siguientes

restricciones. Restricciones de llave mID es una llave para Movie (title,year) es una llave para Movie rID es una llave para Reviewer (rID,mID,ratingDate) es una llave para Rating pero con valores nulos permitidos Restricciones No-Nulo Reviewer.name debe ser No-Nulo Rating.stars debe ser No-Nulo Restricciones de chequeo basado en atributos Movie.year debe ser despes del ao 1900 Rating.stars debe ser {1,2,3,4,5} Rating-ratingDate debe ser despus del ao 2000 Chequeo de restricciones basadas en tuplas Peliculas de Steven Spielberg deben ser antes de 1990 y las pelculas de James Cameron deben ser despus de 1990. Resultados: CREATE TABLE Movie( mID INT PRIMARY KEY, title VARCHAR(50), year INT CHECK(year > 1900), director TEXT, UNIQUE(title, year), CONSTRAINT dir CHECK( (director <> 'Steven Spielberg' AND director <>'James Cameron') OR (director = 'Steven Spielberg' AND year < 1990) OR (director = 'James Cameron' AND year > 1990)) );

CREATE TABLE Reviewer( rID INT PRIMARY KEY, name TEXT NOT NULL ); CREATE TABLE Rating( rID INT, mID INT, stars INT NOT NULL CHECK(stars>=1 AND stars<=5), ratingDate DATE CHECK(ratingDate > to_date('31/12/2000' , 'dd/mm/yyyy')), UNIQUE(rID,mID,ratingDate) ); Ejercicio 2 Despus de crear las tres tablas usando las modificaciones, debera permitir cargar los datos originales sin ningn error. Se insertaron los datos sin ningn problema. Ejercicio 3 Ejecucin de restricciones, cada uno de los siguientes comando genera un error.
update Movie set mID = mID + 1; insert into Movie values (109, 'Titanic', 1997, 'JC'); insert into Reviewer values (201, 'Ted Codd'); update Rating set rID = 205, mID = 104; insert into Reviewer values (209, null); update Rating set stars = null where rID = 208; update Movie set year = year - 40; update Rating set stars = stars + 1; insert into Rating values (201, 101, 1, '1999-01-01'); insert into Movie values (109, 'Jurassic Park', 1993, 'Steven Spielberg'); update Movie set year = year-10 where title = 'Titanic';

Todas las instrucciones generan errores.

Ninguna de las siguientes instrucciones debera generar un error:


insert into Movie values (109, 'Titanic', 2001, null); update Rating set mID = 109; update Movie set year = 1901 where director <> 'James Cameron'; update Rating set stars = stars - 1;

Se pudieron ejecutar todas las instrucciones. Ejercicio 4 Declaracin de integridad referencial, modificar CREATE TABLE para incluir las siguientes restricciones de integridad referencial y polticas. Integridad referencial de Rating.rID para Reviewer.rID Reviewers updated: cascade Reviewers deleted: set null Todo lo dems: error Integridad referencial de Rating.mID para Movie.mID Movies deleted: cascade Todo lo dems: error Instrucciones: CREATE TABLE Rating( rID INT, mID INT, stars INT NOT NULL CHECK(stars>=1 AND stars<=5), ratingDate date CHECK(ratingDate > to_date('31/12/2000' , 'dd/mm/yyyy')), UNIQUE(rID,mID,ratingDate), CONSTRAINT rIDrating FOREIGN KEY (rID) REFERENCES Reviewer(rID) MATCH FULL ON DELETE SET NULL ON UPDATE CASCADE, CONSTRAINT rIDrating FOREIGN KEY (mID) REFERENCES Movie(mID) MATCH FULL ON DELETE CASCADE ); Ejercicio 5 Cargar de nuevo la base de datos, volver a ejecutar las instrucciones de CREAT TABLE. Se deberia cargar las inserciones originales sin ningn error. Se insertaron los datos sin ningn problema.

Ejercicio 6 Ejecutar cada uno de los siguientes comandos, todos deberan generar un error.
insert into Rating values (209, 109, 3, '2001-01-01'); update Rating set rID = 209 where rID = 208; update Rating set mID = mID + 1; update Movie set mID = 109 where mID = 108;

Todas las instrucciones generaron errores. Ninguno de los siguientes comandos debe generar errores.
update Movie set mID = 109 where mID = 102; update Reviewer set rID = rID + 10; delete from Reviewer where rID > 215; delete from Movie where mID < 105;

Se pudieron ejecutar todas las instrucciones. Revisin final Cheque los resultados de la base de datos escribiendo las consultas de SQL: a. La suma de los valores no-nulos rIDs en Rating table, deberan ser 853. Consulta: SELECT sum(rID) FROM Rating WHERE rID IS NOT NULL; Resultado: 853 b. El nmero de tuplas en Rating con nulos rIDs, deberan ser 3. Consulta: SELECT count(*) FROM Rating WHERE rID IS NULL; Resultado: 3