0% encontró este documento útil (0 votos)
114 vistas

Tarea Unidad gbd03

El documento describe un ejercicio para crear una base de datos llamada Turismo_Italia a partir de un modelo relacional dado. Se proporcionan instrucciones SQL para crear las tablas, columnas, claves primarias y restricciones de clave ajena necesarias. Se pide luego modificar la base de datos para añadir nuevas tablas y relaciones.

Cargado por

Maria Garcia
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
114 vistas

Tarea Unidad gbd03

El documento describe un ejercicio para crear una base de datos llamada Turismo_Italia a partir de un modelo relacional dado. Se proporcionan instrucciones SQL para crear las tablas, columnas, claves primarias y restricciones de clave ajena necesarias. Se pide luego modificar la base de datos para añadir nuevas tablas y relaciones.

Cargado por

Maria Garcia
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

TAREA GBD03

EJERCICIO 1 2 puntos

Partiendo del siguiente modelo relacional correspondiente a la base de datos de visitas a monumentos, de
la agencia nacional de turismo de Italia:

PUNTOS DE VISITA (CodigoPunto, NombrePunto, DireccionPunto, Fecha/Periodo, Descripción, AforoMaximo,


Horario, Tarifa)
RESERVAS (CodigoReserva, FechaReserva, FechaVisita, IdCliente, NumVisitantes, TarifaReserva)
Se generan (CodigoReserva, NumTicket)
SERVICIOS ADICIONALES (CodigoServicio, DescripciónServicio, Tipo, Precio)
Pueden incluir (NumTicket, CodigoServicio)
TICKETS (NumTicket, FechaEmisión, Fecha/HoraEntrada, ImporteTicket, CodigoPunto)

Escribe las instrucciones en SQL necesarias para crear la base de datos Turismo_Italia, teniendo en cuenta
las siguientes especificaciones:
• Las columnas AforoMaximo y NumVisitantes toman valores enteros.
• Las columnas Tarifa y TarifaReserva, Precio, ImporteTicket pueden contener decimales
• La numeración de los tickets NumTicket es de tipo autoincrementado.
• Define para las claves ajenas restricciones de actualización en cascada y que no permita el borrado
de registros relacionados.

Guarda la base de datos creada con el nombre Turismo_Italia_TuNombre.sql. (sustituye el texto TuNombre
por el tuyo)

Ten en cuenta que:

* Las claves principales se representan en negrita y subrayado.


* Las claves ajenas se representan en negrita y cursiva.
* Cuando un atributo forma una clave principal y ajena se representa en negrita, subrayado y cursiva.
* Cuando los nombres de tablas, campos o restricciones contienen espacios en blanco, debes utilizar
comillas (las que se encuentran en el teclado a la derecha de la letra P)

Consejos prácticos:

* Mantén un orden a la hora de crear las tablas, definiendo cada columna en una línea que finalice con una
coma.
* Define todas las restricciones una vez especificadas todas las columnas y después de la última coma. Así
añades la PRIMARY KEY y otros tipos de restricciones como CHECK, INDEX, UNIQUE, etc. excepto las
FOREIGN KEY (claves ajenas).
* Para evitar que al definir una restricción de tipo clave ajena hagas referencia a una tabla que todavía no
has creado es recomendable crear primero todas las tablas, en el orden que quieras, y después añadir las
claves ajenas modificando las tablas creadas con ALTER TABLE, así te aseguras de que todas las tablas estén
definidas
Solución ejercicio 1
-- -----------------------------------------------------
-- Schema Turismo_Italia
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `Turismo_Italia` ;

-- -----------------------------------------------------
-- Schema Turismo_Italia
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `Turismo_Italia` DEFAULT CHARACTER SET utf8 ;
USE `Turismo_Italia` ;

-- -----------------------------------------------------
-- Table `Puntos de Visita`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Puntos de Visita` (
`CodigoPunto` INT NOT NULL,
`NombrePunto` VARCHAR(45) NULL,
`DireccionPunto` VARCHAR(100) NULL,
`FechaPeriodo` DATE NULL,
`Descripcion` VARCHAR(200) NULL,
`AforoMaximo` INT NULL,
`Horario` VARCHAR(45) NULL,
`Tarifa` FLOAT NULL,
PRIMARY KEY (`CodigoPunto`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Reservas`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Reservas` (
`CodigoReserva` INT NOT NULL,
`FechaReserva` DATE NULL,
`FechaVisita` DATETIME(1) NULL,
`IdCliente` INT NULL,
`NumVisitantes` INT NULL,
`TarifaReserva` FLOAT NULL,
PRIMARY KEY (`CodigoReserva`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Servicios Adicionales`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Servicios Adicionales` (
`CodigoServicio` INT NOT NULL,
`DescripcionServicio` VARCHAR(200) NULL,
`Tipo` VARCHAR(100) NULL,
`Precio` FLOAT NULL,
PRIMARY KEY (`CodigoServicio`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `Tickets`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Tickets` (
`NumTicket` INT NOT NULL AUTO_INCREMENT,
`FechaEmision` DATE NULL,
`FechaHoraEntrada` DATETIME(1) NULL,
`ImporteTicket` FLOAT NULL,
`Puntos de Visia_CodigoPunto` INT NOT NULL,
PRIMARY KEY (`NumTicket`),
CONSTRAINT `fk_Tickets_Puntos de Visia1`
FOREIGN KEY (`Puntos de Visia_CodigoPunto`)
REFERENCES `Puntos de Visita` (`CodigoPunto`)
ON DELETE RESTRICT
ON UPDATE CASCADE)
ENGINE = InnoDB;

CREATE INDEX `fk_Tickets_Puntos de Visia1_idx` ON `Tickets` (`Puntos de Visia_CodigoPunto` ASC) VISIBLE;

-- -----------------------------------------------------
-- Table `Pueden Incluir`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Pueden Incluir` (
`Servicios Adicionales_CodigoServicio` INT NOT NULL,
`Tickets_NumTicket` INT NOT NULL,
PRIMARY KEY (`Servicios Adicionales_CodigoServicio`, `Tickets_NumTicket`),
CONSTRAINT `fk_Pueden Incluir_Servicios Adicionales`
FOREIGN KEY (`Servicios Adicionales_CodigoServicio`)
REFERENCES `Servicios Adicionales` (`CodigoServicio`)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CONSTRAINT `fk_Pueden Incluir_Tickets1`
FOREIGN KEY (`Tickets_NumTicket`)
REFERENCES `Tickets` (`NumTicket`)
ON DELETE RESTRICT
ON UPDATE CASCADE)
ENGINE = InnoDB;

CREATE INDEX `fk_Pueden Incluir_Servicios Adicionales_idx` ON `Pueden Incluir` (`Servicios


Adicionales_CodigoServicio` ASC) INVISIBLE;

CREATE INDEX `fk_Pueden Incluir_Tickets1_idx` ON `Pueden Incluir` (`Tickets_NumTicket` ASC) VISIBLE;

-- -----------------------------------------------------
-- Table `Se generan`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Se generan` (
`Tickets_NumTicket` INT NOT NULL,
`Reservas_CodigoReserva` INT NOT NULL,
PRIMARY KEY (`Tickets_NumTicket`),
CONSTRAINT `fk_Se generan_Reservas1`
FOREIGN KEY (`Reservas_CodigoReserva`)
REFERENCES `Reservas` (`CodigoReserva`)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CONSTRAINT `fk_Se generan_Tickets1`
FOREIGN KEY (`Tickets_NumTicket`)
REFERENCES `Tickets` (`NumTicket`)
ON DELETE RESTRICT
ON UPDATE CASCADE)
ENGINE = InnoDB;

CREATE INDEX `fk_Se generan_Reservas1_idx` ON `Se generan` (`Reservas_CodigoReserva` ASC) VISIBLE;


CREATE INDEX `fk_Se generan_Tickets1_idx` ON `Se generan` (`Tickets_NumTicket` ASC) VISIBLE;
EJERCICIO 2 1 punto
Modifica la base de datos anterior Turismo_Italia_TuNombre.sql. para añadir las tablas: TRABAJADORES,
T_MANTENIMIENTO, T_GUIAS TURÍSTICOS y Están asociados. (la tabla PUNTOS DE VISITA ya está creada en
el supuesto anterior)

TRABAJADORES (DNI, Apellido1, Apellido2, Nombre, Dirección, FechaContratación)


T_MANTENIMIENTO (DNI, Profesión, Categoría)
T_GUÍAS TURÍSTICOS (DNI, Formación)
PUNTOS DE VISITA (CodigoPunto, NombrePunto, DireccionPunto, Fecha/Periodo, Descripción, AforoMaximo,
Horario, Tarifa)
Están asociados (DNI, CodigoPunto, Fecha)

-- -----------------------------------------------------
-- Table `Trabajadores`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Trabajadores` (
`DNI` INT NOT NULL,
`Apellido1` VARCHAR(45) NULL,
`Apellido2` VARCHAR(45) NULL,
`Nombre` VARCHAR(45) NULL,
`Direccion` VARCHAR(100) NULL,
`FechaContratacion` DATE NULL,
PRIMARY KEY (`DNI`))
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `T_mantenimiento`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `T_mantenimiento` (
`DNI` INT NOT NULL,
`Profesion` VARCHAR(45) NULL,
`Categoria` VARCHAR(45) NULL,
PRIMARY KEY (`DNI`),
CONSTRAINT `fk_T_mantenimiento_Trabajadores1`
FOREIGN KEY (`DNI`)
REFERENCES `Trabajadores` (`DNI`)
ON DELETE RESTRICT
ON UPDATE CASCADE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `T_guias turisticos`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `T_guias turisticos` (
`DNI` INT NOT NULL,
`Formacion` VARCHAR(45) NULL,
PRIMARY KEY (`DNI`),
CONSTRAINT `fk_T_guias turisticos_Trabajadores1`
FOREIGN KEY (`DNI`)
REFERENCES `Trabajadores` (`DNI`)
ON DELETE RESTRICT
ON UPDATE CASCADE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `Estan asociados`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Estan asociados` (
`T_guias turisticos_DNI` INT NOT NULL,
`Fecha` DATE NOT NULL,
`Puntos de Visita_CodigoPunto` INT NOT NULL,
PRIMARY KEY (`T_guias turisticos_DNI`, `Fecha`),
CONSTRAINT `fk_Estan asociados_Puntos de Visita1`
FOREIGN KEY (`Puntos de Visita_CodigoPunto`)
REFERENCES `Puntos de Visita` (`CodigoPunto`)
ON DELETE RESTRICT
ON UPDATE CASCADE,
CONSTRAINT `fk_Estan asociados_T_guias turisticos1`
FOREIGN KEY (`T_guias turisticos_DNI`)
REFERENCES `T_guias turisticos` (`DNI`)
ON DELETE RESTRICT
ON UPDATE CASCADE)
ENGINE = InnoDB;

CREATE INDEX `fk_Estan asociados_T_guias turisticos1_idx` ON `Estan asociados` (`T_guias turisticos_DNI` ASC)
VISIBLE;
EJERCICIO 3 2 puntos
Ejecuta el script anterior en MySQL desde una instancia de MySQL Workbench guardando la base de datos
generada con el nombre Turismo_Italia_TuNombre.sql. Mediante la opción del menú de MySQL
Workbench: Database / Reverse Engineer, genera el esquema relacional de la base de datos. Modifica si
es necesario el esquema generado para que se adapte al modelo y captura la pantalla resultante. (Revisa
sobre todo las cardinalidades mínimas y máximas)
EJERCICIO 4 5 puntos
Sobre la base de datos Turismo_Italia_TuNombre.sql. realiza las siguientes modificaciones:

Tabla TRABAJADORES

4.1 Añade un índice que facilite búsquedas frecuentes por Apellido1, Apellido2 y Nombre, sin duplicados.
CREATE UNIQUE INDEX idx_nombre ON trabajadores (Apellido1, Apellido2, Nombre);

4.2 Añade la columna CP (código postal) entre Dirección y FechaContratación.


ALTER TABLE TRABAJADORES ADD COLUMN CP VARCHAR(5) AFTER DIRECCION;

Tabla TICKETS

4.3 Añade una restricción que indique que el valor por defecto de la FechaEmisión es la fecha actual.
alter table TICKETS modify FechaEmision datetime default current_timestamp;

Tabla pueden incluir

4.4 Añade una clave artificial denominada IdServicioTicket, cuyos valores se incrementen
automáticamente. Mantén el resto de restricciones de la tabla
alter table ´Pueden Incluir`
drop foreign key `fk_Pueden Incluir_Servicios Adicionales`,
drop foreign key `fk_Pueden Incluir_Tickets1`,
drop primary key,
add column IdServicioTicket int not null auto_increment,
add primary key (IdServicioTicket),
ADD CONSTRAINT `fk_Pueden Incluir_Servicios Adicionales`
FOREIGN KEY (`Servicios Adicionales_CodigoServicio`) REFERENCES `Servicios Adicionales` (`CodigoServicio`)
ON DELETE RESTRICT ON UPDATE CASCADE,
ADD CONSTRAINT `fk_Pueden Incluir_Tickets1`
FOREIGN KEY (`Tickets_NumTicket`) REFERENCES `Tickets` (`NumTicket`)
ON DELETE RESTRICT ON UPDATE CASCADE) ;

Tabla SERVICIOS ADICIONALES

4.5 La columna Tipo puede contener los valores: individual, grupo, ambos a la vez o ninguno.
ALTER TABLE serviciosadicionales MODIFY TIPO SET('individual', 'grupo' );

Tabla RESERVAS

4.6 Modifica el tipo de datos de la columna TarifaReserva para que admita únicamente valores enteros.
ALTER TABLE RESERVAS MODIFY TARIFARESERVA INTEGER;

4.7 Añade una restricción en la columna NumVisitantes para que no admita valores nulos.
ALTER TABLE reservas MODIFY NumVisitantes INTEGER NOT NULL;

4.8 Añade un índice por la columna FechaReserva.


ALTER TABLE reservas ADD INDEX key_FECHA (FechaReserva);

4.9 Muestra todos los índices de la tabla.


SHOW INDEX FROM reservas

4.10 Borra el índice que acabas de crear en el punto anterior.


ALTER TABLE reservas DROP INDEX key_FECHA;

También podría gustarte