1. Universidad Técnica Particular de Loja
Base de Datos I
Alumna:MarilynJaramillo
Ing. Juan CarlosMorocho
Desarrollode Ejercicios delCapitulo6
6.10 Cree la tabla Hotel utilizando las características de mejora de la integridad de SQL
CREATE TABLE Hotel
(
hotelNo varchar2(4) PRIMARYKEY,
hotelName varchar2(30) NOT NULL,
city varchar2(15) NOT NULL
);
6.11 Ahora creelas tablas Room,Booking y Guest utilizandolas características demejora dela
integridad deSQLconlas siguientes restricciones
Typepuedetenerlossiguientes valores:Single,Doubleo Family.
Price debeestarcomprendido entre10euros y100 euros.
roomNo debeestarcomprendidoentre1y 100.
dateFrom ydateTo debensermayores quelafechaactual.
no sepuedereservardosveces enuna mismahabitación.
Un mismo huéspedno puedetenerreservas quesesolapen.
CREATE TABLE Room
(
roomNo number(3) CHECK(roomNo BETWEEN1AND 100),
hotelNo varchar2(4) NOT NULL,
type varchar2(15) NOT NULL CHECK(typeIN('Single','Double','Family')),
price number(8,2) NOT NULL CHECK(priceBETWEEN10AND 100),
CONSTRAINT roomNo_PK PRIMARYKEY(roomNo),
CONSTRAINT hotelNo_FK FOREIGNKEY(hotelNo)referenceHotel(hotelNo),
);
CREATE TABLE Booking
(
hotelNo varchar2(4) NOT NULL,
guestNo number(3) NOT NULL,
dateFrom DATE NOT NULL CHECK(dateFrom<dateTo),
dateTo DATE NOT NULL CHECK(dateTo >dateFrom),
roomNo number(3) NOT NULL UNIQUE,
CONSTRAINT Booking_PK PRIMARYKEY(hotelNo,guestNo,roomNo),
CONSTRAINT hotel_FK FOREIGNKEY(hotelNo)referenceHotel(hotelNo),
CONSTRAINT guest_FK FOREIGNKEY(guestNo) referenceGuest(guestNo),
CONSTRAINT room_FK FOREIGNKEY(roomNo) referenceRoom(roomNo),
);
2. CREATE TABLE Guest
(
guestNo number(3) PRIMARYKEY,
guestName varchar2(30) NOT NULL,
guestAddress varchar2(30) NOT NULL
);
6.12 Cree una tabla separadaconla misma estructuraquela tabla Bookingpara almacenarlos
registros antiguos.Utilizandola instrucciónINSERT,copielos registros dela tabla Booking a la
tabla de archivo,traspasandoúnicamentelas reservas anteriores al1 deenero de 2003.Borre
todas las reservas anteriores al1 deenero de 2003 dela tabla Booking.
CREATE TABLE Reg_Antiguos
(
hotelNo varchar2(4) NOT NULL,
guestNo number(3) NOT NULL,
dateFrom DATE NOT NULL CHECK(dateFrom<dateTo),
dateTo DATE NOT NULL CHECK(dateTo >dateFrom),
roomNo number(3) NOT NULL UNIQUE,
CONSTRAINT Booking_PK PRIMARYKEY(hotelNo,guestNo,roomNo),
CONSTRAINT hotel_FK FOREIGNKEY(hotelNo)referenceHotel(hotelNo),
CONSTRAINT guest_FK FOREIGNKEY(guestNo) referenceGuest(guestNo),
CONSTRAINT room_FK FOREIGNKEY(roomNo) referenceRoom(roomNo),
);
INSERT INTO Reg_Antiguos
SELECT *
FROM Bookingb
WHERE b.dateTo <'1de enero de2003';
DELETE FROM Booking
WHERE dateTo <''1deenero de 2003';
6.13 Cree una vista quecontenga el nombredel hotel y los nombres delos huéspedes albergados
en el hotel.
CREATE VIEWVista(hotelName,guestName)
AS SELECT h.hotelName,g.guestName
FROMBookingb, Guestg, Hotelh
WHERE b.hotelNo =h.hotelNo AND b.guestNo=g.guestNo;
6.14 Cree una vista quecontenga la cuenta correspondientea cada huésped delGrovenorHotel.
CREATE VIEWCuenta(Cuenta,Cliente)
AS SELECT ((b.dateTo – b.dateFrom)*r.price),g.guestName
FROMBookingb, Guestg, Roomr
WHERE b.roomNo =r.roomNo AND b.guestNo=g.guestNo;
6.15 Proporcionea los usuariosManagery Directoraccesocompletoa estas vistas,conel
privilegiodepasarelaccesoa otros usuarios.
GRANT SELECT,UPDATE,DELETE,INSERT
ON Vista
TO Manager,Director
WHIT GRANT OPTION;
GRANT SELECT,UPDATE,DELETE,INSERT
3. ON Cuenta
TO Manager,Director
WHIT GRANT OPTION;
6.16 ProporcionealusuarioAccounts accesodetipoSELECTa estas vistas.Ahora revoqueel
accesodeese usuario.
GRANT SELECT
ON Vista
TO Accounts;
REVOKE SELECT
ON Vista
FROMAccounts;
GRANT SELECT
ON Cuenta
TO Accounts;
REVOKE SELECT
ON Cuenta
FROMAccounts;
6.17 Considerela siguientevista definida sobreelesquema Hotel:
CREATE VIEWHotelBookingCount( hotelNo,bookingCount)
AS SELECT h.hotelNo,COUNT (*)
FROMHotelh, Roomr, Bookingb
WHERE h.hotelNo =r.hotelNo AND r.roomNo =b.roomNo
GROUP BY h.hotelNo;
Para cada una delas siguientes consultas indiquesi la consulta es valida y,en casodeque lo que
sea, muestrecomose establecería la correspondencia entrela consulta y la respectiva consulta
sobrelas tablas basesubyacentes.
SELECT *
FROM HotelBookingCount;
Verdadero
SELECT h.hotelNo,COUNT (*)
FROM Hotelh, Roomr, Bookingb
WHERE h.hotelNo =r.hotelNo AND r.roomNo =b.roomNo
GROUP BY h.hotelNo;
SELECT hotelNo
WHERE hotelNo =‘H001’;
Verdadero
SELECT hotelNo
FROM Hotel
WHERE hotelNo ='H001';
SELECT MIN(bookingCount)
FROM HotelBookingCount;
4. Falso
SELECT COUNT(*)
FROM HotelBookingCount;
Falso
SELECT hotelNo
FROM HotelBookingCount
WHERE bookingCount>1000;
Verdadero
SELECT h.hotelNo,COUNT (*)
FROM Hotelh, Roomr, Bookingb
WHERE h.hotelNo =r.hotelNo AND r.roomNo =b.roomNo
GROUP BY h.hotelNo;
HAVING COUNT (*) > 1000
SELECT hotelNo
FROM HotelBookingCount
ORDER BY bookingCount;
Falso