Get In Touch
541 Melville Ave, Palo Alto, CA 94301,
anthoncode.com
Ph: +1.831.705.5448
Work Inquiries
info@anthoncode.com
Ph: +1.831.306.6725
Back

Ejercicios sobre el Diseño de Bases de Datos Relacionales

Para cada uno de los ejercicios siguientes, se requiere la obtención del esquema lógico relacional que se corresponda con la especificación de requisitos. En algunos de estos ejercicios, se ha proporcionado previamente un esquema conceptual como referencia.

Dentro de cada esquema lógico, es fundamental identificar los atributos que funcionan como clave primaria y aquellos que operan como claves foráneas. Además, se debe especificar claramente si los atributos que funcionan como claves foráneas permiten valores nulos o no. También es importante definir las reglas de comportamiento en caso de borrado o modificación de tuplas en la relación a la que hacen referencia dichas claves foráneas.

Ejercicio 1

Se busca desarrollar una base de datos relacional para gestionar información relacionada con los casos atendidos por un bufete de abogados. Cada caso está identificado por un número de expediente único y está asociado a un cliente en particular. Para cada caso, es necesario registrar su período, que incluye la fecha de inicio y la fecha de cierre o archivo, así como su estado actual (por ejemplo, en trámite, archivado, etc.). Además, se requiere almacenar los datos personales del cliente al que pertenece el caso, tales como su número de identificación (DNI), nombre, dirección, entre otros detalles relevantes.

Adicionalmente, es importante tener en cuenta que algunos casos son gestionados por uno o varios procuradores, y se necesita mantener un registro de los datos personales de estos procuradores, incluyendo información como su nombre, dirección y otros datos relevantes.

primero debes crear las tablas necesarias y establecer las relaciones entre ellas. Aquí te proporciono un esquema básico que puedes utilizar como punto de partida. Puedes ajustarlo según tus necesidades específicas:


Para resolver este problema en MySQL, primero debes crear las tablas necesarias y establecer las relaciones entre ellas. Aquí te proporciono un esquema básico que puedes utilizar como punto de partida. Puedes ajustarlo según tus necesidades específicas:

  1. Crear la tabla Clientes para almacenar la información de los clientes:
CREATE TABLE Clientes (
    ClienteID INT AUTO_INCREMENT PRIMARY KEY,
    DNI VARCHAR(15) NOT NULL,
    Nombre VARCHAR(255) NOT NULL,
    Direccion VARCHAR(255),
    -- Otros campos de información del cliente
);
  1. Crear la tabla Casos para almacenar la información de los casos:
CREATE TABLE Casos (
    CasoID INT AUTO_INCREMENT PRIMARY KEY,
    ClienteID INT NOT NULL,
    FechaInicio DATE NOT NULL,
    FechaCierre DATE,
    Estado VARCHAR(50),
    FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID)
);

Crear la tabla Procuradores para almacenar la información de los procuradores:

CREATE TABLE Procuradores (
    ProcuradorID INT AUTO_INCREMENT PRIMARY KEY,
    Nombre VARCHAR(255) NOT NULL,
    Direccion VARCHAR(255),
    -- Otros campos de información del procurador
);

Para manejar la relación «muchos a muchos» entre casos y procuradores, crea una tabla de unión CasoProcurador:

CREATE TABLE CasoProcurador (
    CasoID INT NOT NULL,
    ProcuradorID INT NOT NULL,
    PRIMARY KEY (CasoID, ProcuradorID),
    FOREIGN KEY (CasoID) REFERENCES Casos(CasoID),
    FOREIGN KEY (ProcuradorID) REFERENCES Procuradores(ProcuradorID)
);

Ejercicio 2

Se plantea el diseño de una base de datos relacional destinada a la gestión de información concerniente a los zoológicos que existen a nivel global, así como a las distintas especies animales que estos albergan. Para cada zoológico, se disponen de datos como su nombre, ubicación en términos de ciudad y país, dimensiones en metros cuadrados y presupuesto anual. Respecto a las especies animales, se registra su denominación común y científica, la familia taxonómica a la que pertenecen, y se indica si están catalogadas como especies en peligro de extinción.

Asimismo, es esencial mantener información detallada acerca de cada animal presente en los zoológicos, incluyendo su número de identificación, especie, género, fecha de nacimiento, país de origen y continente de procedencia.

Crear la tabla Zoologicos para almacenar la información sobre los zoológicos:

CREATE TABLE Zoologicos (
    ZoologicoID INT AUTO_INCREMENT PRIMARY KEY,
    Nombre VARCHAR(255) NOT NULL,
    Ciudad VARCHAR(255) NOT NULL,
    Pais VARCHAR(255) NOT NULL,
    AreaMetrosCuadrados DECIMAL(10, 2) NOT NULL,
    PresupuestoAnual DECIMAL(12, 2) NOT NULL
);

Crear la tabla Especies para almacenar información sobre las especies animales:

CREATE TABLE Especies (
    EspecieID INT AUTO_INCREMENT PRIMARY KEY,
    NombreComun VARCHAR(255) NOT NULL,
    NombreCientifico VARCHAR(255) NOT NULL,
    FamiliaTaxonomica VARCHAR(255),
    EnPeligro BOOLEAN NOT NULL
);

Crear la tabla Animales para almacenar información sobre los animales en los zoológicos:

CREATE TABLE Animales (
    AnimalID INT AUTO_INCREMENT PRIMARY KEY,
    EspecieID INT NOT NULL,
    Genero VARCHAR(255),
    FechaNacimiento DATE,
    PaisOrigen VARCHAR(255),
    ContinenteProcedencia VARCHAR(255),
    FOREIGN KEY (EspecieID) REFERENCES Especies(EspecieID)
);

Ejercicio 3

Se plantea el diseño de una base de datos relacional destinada a la gestión integral de los datos correspondientes a los socios de un prestigioso club náutico. Cada socio tiene registrada su información personal, así como los detalles relativos a las embarcaciones que posee. Estos datos comprenden el número de matrícula, nombre, número de amarre y la cuota asociada que abona por cada amarre.

Adicionalmente, se aspira a conservar un registro completo de las salidas realizadas por cada barco, incluyendo la fecha y hora de partida, el destino, así como los datos personales del patrón. Es importante destacar que el patrón no necesariamente debe ser el propietario del barco ni estar afiliado como socio del club.

Crear la tabla Socios para almacenar la información personal de los socios:

CREATE TABLE Socios (
    SocioID INT AUTO_INCREMENT PRIMARY KEY,
    Nombre VARCHAR(255) NOT NULL,
    Direccion VARCHAR(255),
    Telefono VARCHAR(20),
    -- Otros campos de información personal
);

Crear la tabla Embarcaciones para registrar los detalles de las embarcaciones de los socios:

CREATE TABLE Embarcaciones (
    EmbarcacionID INT AUTO_INCREMENT PRIMARY KEY,
    SocioID INT NOT NULL,
    NumeroMatricula VARCHAR(20) NOT NULL,
    NumeroAmarre INT NOT NULL,
    Cuota DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (SocioID) REFERENCES Socios(SocioID)
);

Crear la tabla Salidas para mantener un registro de las salidas de las embarcaciones:

CREATE TABLE Salidas (
    SalidaID INT AUTO_INCREMENT PRIMARY KEY,
    EmbarcacionID INT NOT NULL,
    FechaHoraPartida DATETIME NOT NULL,
    Destino VARCHAR(255) NOT NULL,
    PatronNombre VARCHAR(255) NOT NULL,
    -- Otros campos de información de la salida
    FOREIGN KEY (EmbarcacionID) REFERENCES Embarcaciones(EmbarcacionID)
);

Ejercicio 4

Se plantea el diseño de una base de datos relacional destinada a gestionar de manera eficiente la información relacionada con los préstamos de películas en un videoclub. Actualmente, el manejo de esta información se lleva a cabo de la siguiente manera:

Cuando un préstamo se efectúa, se completa una ficha que registra los datos del socio que retira la película, la fecha y el número de identificación único de la copia de la película que se lleva (ya que cada película tiene varias copias en cintas diferentes). Esta ficha se archiva en el sistema de películas prestadas. Cuando el socio devuelve la película, la ficha se traslada al sistema de películas devueltas.

El videoclub dispone también de un sistema de fichas de películas organizadas por título, cada una con información adicional como el género de la película (comedia, terror, etc.), el nombre del director y los nombres de los actores que participan en ella. Además, existe un sistema de fichas de socios, ordenadas por un código de identificación asignado al momento de obtener la membresía. Estas fichas de socios incluyen el nombre del socio, su dirección, número de teléfono, así como los nombres de sus directores y actores favoritos, y sus géneros cinematográficos preferidos.

Cuando un socio desea tomar prestada una película que no se encuentra disponible, se le ofrece la opción de ingresar a la lista de espera correspondiente a esa película. Cada vez que una película es devuelta, se verifica si hay socios en la lista de espera y, en caso afirmativo, se notifica al primer socio de la lista por teléfono para informarle que ya puede recoger la película, eliminando su nombre de la lista una vez que lo ha hecho.

-- Tabla de Socios
CREATE TABLE Socios (
    SocioID INT PRIMARY KEY,
    Nombre VARCHAR(255),
    Direccion VARCHAR(255),
    Telefono VARCHAR(20),
    ActoresFavoritos VARCHAR(255),
    DirectoresFavoritos VARCHAR(255),
    GenerosPreferidos VARCHAR(255)
);

-- Tabla de Películas
CREATE TABLE Peliculas (
    PeliculaID INT PRIMARY KEY,
    Titulo VARCHAR(255),
    Genero VARCHAR(50),
    Director VARCHAR(100),
    Actores TEXT,  -- Puede ser una lista de actores
    CopiasDisponibles INT  -- Puede ser un campo calculado
);

-- Tabla de Préstamos
CREATE TABLE Prestamos (
    PrestamoID INT PRIMARY KEY,
    SocioID INT,
    PeliculaID INT,
    FechaPrestamo DATE,
    FechaDevolucion DATE,
    Estado VARCHAR(10),  -- "prestada" o "devuelta"
    FOREIGN KEY (SocioID) REFERENCES Socios(SocioID),
    FOREIGN KEY (PeliculaID) REFERENCES Peliculas(PeliculaID)
);

-- Tabla de Lista de Espera
CREATE TABLE ListaEspera (
    ListaEsperaID INT PRIMARY KEY,
    PeliculaID INT,
    SocioID INT,
    FechaSolicitud DATE,
    Notificado BIT,  -- Puede ser 0 o 1 para indicar si se ha notificado
    FOREIGN KEY (PeliculaID) REFERENCES Peliculas(PeliculaID),
    FOREIGN KEY (SocioID) REFERENCES Socios(SocioID)
);

Ejercicio 5

Se desea almacenar la información de una compañía aérea en una base de datos relacional. La
compañía aérea tiene tres recursos principales: aviones, pilotos y miembros de tripulación. De cada piloto se
desea conocer su código, nombre y horas de vuelo. De los miembros de tripulación sólo mantendremos su
código y nombre. Todos ellos (pilotos y miembros) tienen una base a la que regresan después de los vuelos
de una jornada. Un vuelo que va desde un origen a un destino y a una hora determinada, tiene un número de
vuelo (por ejemplo, el vuelo de Palma a Alicante de las 13:50 es el vuelo IB-8830). De cada vuelo que se va a
realizar durante los próximos tres meses, así como de los vuelos que ya se han realizado, se desea saber el
avión en que se va a hacer o en el que se ha hecho, el piloto y cada uno de los miembros de la tripulación.
Cada avión tiene un código, es de un tipo (por ejemplo, BOEING-747) y tiene una base donde es sometido a
las revisiones periódicas de mantenimiento.

-- Tabla de Aviones
CREATE TABLE Aviones (
    CodigoAvion INT PRIMARY KEY,
    Tipo VARCHAR(50),
    BaseMantenimiento VARCHAR(255)
);

-- Tabla de Pilotos
CREATE TABLE Pilotos (
    CodigoPiloto INT PRIMARY KEY,
    Nombre VARCHAR(255),
    HorasVuelo INT
);

-- Tabla de Miembros de Tripulación
CREATE TABLE MiembrosTripulacion (
    CodigoMiembro INT PRIMARY KEY,
    Nombre VARCHAR(255)
);

-- Tabla de Bases
CREATE TABLE Bases (
    CodigoBase INT PRIMARY KEY,
    Nombre VARCHAR(255)
);

-- Tabla de Vuelos
CREATE TABLE Vuelos (
    NumeroVuelo VARCHAR(255) PRIMARY KEY,
    Origen VARCHAR(255),
    Destino VARCHAR(255),
    HoraSalida TIMESTAMP,
    Avion INT,
    Piloto INT,
    FOREIGN KEY (Avion) REFERENCES Aviones(CodigoAvion),
    FOREIGN KEY (Piloto) REFERENCES Pilotos(CodigoPiloto)
);

-- Tabla de TripulacionVuelo
CREATE TABLE TripulacionVuelo (
    ID INT PRIMARY KEY,
    Vuelo VARCHAR(255),
    MiembroTripulacion INT,
    FOREIGN KEY (Vuelo) REFERENCES Vuelos(NumeroVuelo),
    FOREIGN KEY (MiembroTripulacion) REFERENCES MiembrosTripulacion(CodigoMiembro)
);

Ejercicio 6

El servicio de estudiantes de la universidad desempeña un papel crucial al proporcionar información esencial acerca de las asignaturas disponibles en cada programa académico, así como detalles sobre los profesores a cargo. Este servicio se apoya en una estructura de datos que incluye archivos de asignaturas y profesores, gestionados por programas específicos diseñados para generar los informes necesarios. Sin embargo, debido a los desafíos inherentes a la inconsistencia de datos en el sistema de archivos actual, se busca diseñar una base de datos relacional que lo reemplace de manera efectiva.

Para comprender mejor los requerimientos del servicio de estudiantes, se han proporcionado algunas aclaraciones cruciales:

  1. Cada departamento universitario contiene múltiples áreas de conocimiento, y cada una de estas áreas ofrece un conjunto único de asignaturas que pueden estar relacionadas con una o varias titulaciones académicas.
  2. Cada profesor pertenece de manera exclusiva a una de las áreas de conocimiento dentro de un departamento y se encarga de impartir clases en una o varias de las asignaturas que pertenecen a dicha área.

Estos detalles son fundamentales para el diseño de la nueva base de datos relacional, ya que permitirán organizar de manera coherente la información sobre asignaturas, profesores y sus respectivas relaciones, facilitando así el acceso y la gestión de datos de manera más eficiente.

-- Tabla de Departamentos
CREATE TABLE Departamentos (
    DepartamentoID INT PRIMARY KEY,
    NombreDepartamento VARCHAR(255),
    Ubicacion VARCHAR(255)
);

-- Tabla de Áreas de Conocimiento
CREATE TABLE AreasConocimiento (
    AreaID INT PRIMARY KEY,
    NombreArea VARCHAR(255),
    DepartamentoID INT,
    FOREIGN KEY (DepartamentoID) REFERENCES Departamentos(DepartamentoID)
);

-- Tabla de Asignaturas
CREATE TABLE Asignaturas (
    AsignaturaID INT PRIMARY KEY,
    NombreAsignatura VARCHAR(255),
    AreaID INT,
    Titulacion VARCHAR(255),
    Creditos INT,
    FOREIGN KEY (AreaID) REFERENCES AreasConocimiento(AreaID)
);

-- Tabla de Profesores
CREATE TABLE Profesores (
    ProfesorID INT PRIMARY KEY,
    NombreProfesor VARCHAR(255),
    AreaID INT,
    DepartamentoID INT,
    FOREIGN KEY (AreaID) REFERENCES AreasConocimiento(AreaID),
    FOREIGN KEY (DepartamentoID) REFERENCES Departamentos(DepartamentoID)
);

-- Tabla de Relación Profesores-Asignaturas
CREATE TABLE ProfesoresAsignaturas (
    RelacionID INT PRIMARY KEY,
    ProfesorID INT,
    AsignaturaID INT,
    FOREIGN KEY (ProfesorID) REFERENCES Profesores(ProfesorID),
    FOREIGN KEY (AsignaturaID) REFERENCES Asignaturas(AsignaturaID)
);

-- Llenar la tabla de Departamentos
INSERT INTO Departamentos (DepartamentoID, NombreDepartamento, Ubicacion)
VALUES
    (1, 'Departamento de Ciencias de la Computación', 'Edificio A'),
    (2, 'Departamento de Matemáticas', 'Edificio B'),
    (3, 'Departamento de Literatura', 'Edificio C');

-- Llenar la tabla de Áreas de Conocimiento
INSERT INTO AreasConocimiento (AreaID, NombreArea, DepartamentoID)
VALUES
    (101, 'Inteligencia Artificial', 1),
    (102, 'Álgebra', 2),
    (103, 'Poesía', 3);

-- Llenar la tabla de Asignaturas
INSERT INTO Asignaturas (AsignaturaID, NombreAsignatura, AreaID, Titulacion, Creditos)
VALUES
    (1001, 'Programación Avanzada', 101, 'Ingeniería en Informática', 6),
    (1002, 'Álgebra Lineal', 102, 'Matemáticas', 4),
    (1003, 'Poesía Contemporánea', 103, 'Literatura', 3);

-- Llenar la tabla de Profesores
INSERT INTO Profesores (ProfesorID, NombreProfesor, AreaID, DepartamentoID)
VALUES
    (201, 'Juan Pérez', 101, 1),
    (202, 'María López', 102, 2),
    (203, 'Carlos Sánchez', 103, 3);

-- Llenar la tabla de Relación Profesores-Asignaturas
INSERT INTO ProfesoresAsignaturas (RelacionID, ProfesorID, AsignaturaID)
VALUES
    (301, 201, 1001),
    (302, 202, 1002),
    (303, 203, 1003);

Ejercicio 7

La Asociación de Cines de una ciudad tiene la intención de desarrollar un servicio telefónico que permita a los usuarios realizar consultas relacionadas con las películas que se encuentran en cartelera en el momento presente. Entre las consultas que se podrán realizar se incluyen: averiguar en qué cines específicos se está proyectando una película en particular y conocer los horarios de las proyecciones, obtener información acerca de las películas animadas que están siendo exhibidas y su ubicación, así como conocer la lista de películas que se están presentando en un cine específico.

Para llevar a cabo este proyecto, es fundamental diseñar una base de datos relacional que contenga de manera organizada toda la información requerida. Concretamente, para cada cine en la base de datos se incluirán detalles como el título de la película en proyección y los horarios de las funciones, junto con información adicional como el nombre del director, hasta tres de los protagonistas destacados, el género de la película (ya sea comedia, intriga, etc.) y la clasificación por edad (por ejemplo, si es apta para menores de 18 años).

La base de datos también almacenará datos relacionados con la ubicación de los cines, incluyendo la dirección completa, el número de teléfono de contacto y las tarifas aplicables según el día (tales como tarifas para el día del espectador, día del jubilado, festivos, vísperas, descuentos para estudiantes, entre otros).

Es importante tener en cuenta que algunos cines pueden tener varias salas de proyección, cada una mostrando diferentes películas, y que en un mismo cine pueden realizarse proyecciones de distintas películas en horarios diferentes.

A continuación, se presenta un ejemplo de la información que los cines proporcionarán al nuevo servicio telefónico, detallando los elementos clave que se incluirán en la base de datos.

-- Tabla de Cines
CREATE TABLE Cines (
    CineID INT PRIMARY KEY,
    NombreCine VARCHAR(255),
    Direccion VARCHAR(255),
    Telefono VARCHAR(20)
);

-- Tabla de Películas
CREATE TABLE Peliculas (
    PeliculaID INT PRIMARY KEY,
    Titulo VARCHAR(255),
    Director VARCHAR(255),
    Genero VARCHAR(50),
    ClasificacionEdad VARCHAR(10)
);

-- Tabla de Horarios
CREATE TABLE Horarios (
    HorarioID INT PRIMARY KEY,
    CineID INT,
    PeliculaID INT,
    Sala VARCHAR(10),
    HoraProyeccion TIME,
    FOREIGN KEY (CineID) REFERENCES Cines(CineID),
    FOREIGN KEY (PeliculaID) REFERENCES Peliculas(PeliculaID)
);

-- Tabla de Tarifas
CREATE TABLE Tarifas (
    TarifaID INT PRIMARY KEY,
    CineID INT,
    DiaSemana VARCHAR(20),
    Tarifa DECIMAL(5, 2),
    FOREIGN KEY (CineID) REFERENCES Cines(CineID)
);

-- Tabla de Protagonistas
CREATE TABLE Protagonistas (
    ProtagonistaID INT PRIMARY KEY,
    PeliculaID INT,
    NombreProtagonista VARCHAR(255),
    FOREIGN KEY (PeliculaID) REFERENCES Peliculas(PeliculaID)
);

-- Insertar datos ficticios

-- Datos de Cines
INSERT INTO Cines (CineID, NombreCine, Direccion, Telefono)
VALUES
    (1, 'CineCity', '123 Calle Principal', '123-456-7890'),
    (2, 'CineTopia', '456 Avenida Secundaria', '987-654-3210');

-- Datos de Películas
INSERT INTO Peliculas (PeliculaID, Titulo, Director, Genero, ClasificacionEdad)
VALUES
    (101, 'Los Vengadores', 'Joss Whedon', 'Acción', 'PG-13'),
    (102, 'Toy Story 4', 'Josh Cooley', 'Animación', 'G');

-- Datos de Horarios
INSERT INTO Horarios (HorarioID, CineID, PeliculaID, Sala, HoraProyeccion)
VALUES
    (201, 1, 101, 'Sala 1', '15:00:00'),
    (202, 1, 101, 'Sala 2', '17:30:00'),
    (203, 2, 102, 'Sala 1', '14:45:00'),
    (204, 2, 102, 'Sala 2', '16:30:00');

-- Datos de Tarifas
INSERT INTO Tarifas (TarifaID, CineID, DiaSemana, Tarifa)
VALUES
    (301, 1, 'Lunes', 8.50),
    (302, 1, 'Miércoles', 7.00),
    (303, 2, 'Martes', 9.00),
    (304, 2, 'Sábado', 10.50);

-- Datos de Protagonistas
INSERT INTO Protagonistas (ProtagonistaID, PeliculaID, NombreProtagonista)
VALUES
    (401, 101, 'Robert Downey Jr.'),
    (402, 101, 'Chris Evans'),
    (403, 102, 'Tom Hanks');

Ejercicio 8

Se requiere la creación de una base de datos bibliográfica para respaldar las actividades de investigación de un grupo académico dentro de una universidad. El propósito principal es almacenar toda la información relevante relacionada con los artículos científicos que abordan los temas de investigación del grupo y de los cuales puedan poseer copias. Estas copias pueden estar físicamente ubicadas en las estanterías del laboratorio o en las oficinas de los investigadores del grupo.

Para cada artículo, se busca recopilar los siguientes datos: título, autores, palabras clave, dirección de correo electrónico de contacto (si está disponible), confirmación de si se dispone de una copia en el grupo y su ubicación específica. Los artículos pueden haber sido publicados como informes técnicos, en actas de congresos o en revistas científicas. Para los informes técnicos, se registrarán el número de informe y el centro de publicación, junto con la fecha de publicación (mes y año). En el caso de artículos en actas de congresos, se almacenarán el nombre del congreso, la edición en la que se presentó el artículo, la ubicación del congreso (ciudad y fechas de inicio y finalización), el tipo de congreso (nacional o internacional), la frecuencia de celebración (anual, etc.) y, si es internacional, el país donde se llevó a cabo la presentación inicial del artículo. Además, se conservará el año en que se celebró este congreso por primera vez. Por último, para los artículos publicados en revistas científicas, se registrarán el nombre de la revista, el nombre del editor, el año de inicio de publicación, la frecuencia de publicación (mensual, trimestral, etc.), los temas cubiertos por la revista, el número de la revista en la que apareció el artículo, las páginas específicas del artículo (por ejemplo, 512-519) y el año de publicación.

Asimismo, se busca almacenar información adicional sobre los autores de los artículos y otros investigadores en general. Esto incluye detalles como el centro de investigación en el que trabajan y sus direcciones de correo electrónico. Si es posible, se desea también obtener información sobre los temas de investigación específicos en los que están involucrados.

-- Tabla de Artículos
CREATE TABLE Articulos (
    ArticuloID INT PRIMARY KEY,
    Titulo VARCHAR(255),
    PalabrasClave VARCHAR(255),
    CopiaDisponible BOOLEAN,
    UbicacionCopia VARCHAR(255),
    TipoPublicacion VARCHAR(50),
    FechaPublicacion DATE
);

-- Tabla de Autores
CREATE TABLE Autores (
    AutorID INT PRIMARY KEY,
    NombreAutor VARCHAR(255),
    CorreoElectronico VARCHAR(255),
    CentroInvestigacion VARCHAR(255)
);

-- Tabla de Información Adicional de Autores
CREATE TABLE InfoAutores (
    InfoAutorID INT PRIMARY KEY,
    AutorID INT,
    TemasInvestigacion VARCHAR(255),
    FOREIGN KEY (AutorID) REFERENCES Autores(AutorID)
);

-- Tabla de Informes Técnicos
CREATE TABLE InformesTecnicos (
    InformeID INT PRIMARY KEY,
    ArticuloID INT,
    NumeroInforme VARCHAR(50),
    CentroPublicacion VARCHAR(255),
    FOREIGN KEY (ArticuloID) REFERENCES Articulos(ArticuloID)
);

-- Tabla de Actas de Congresos
CREATE TABLE ActasCongresos (
    ActaID INT PRIMARY KEY,
    ArticuloID INT,
    NombreCongreso VARCHAR(255),
    EdicionCongreso VARCHAR(255),
    UbicacionCongreso VARCHAR(255),
    TipoCongreso VARCHAR(50),
    FrecuenciaCongreso VARCHAR(50),
    PaisCongreso VARCHAR(255),
    AñoPrimeraEdicionCongreso INT,
    FOREIGN KEY (ArticuloID) REFERENCES Articulos(ArticuloID)
);

-- Tabla de Revistas Científicas
CREATE TABLE RevistasCientificas (
    RevistaID INT PRIMARY KEY,
    ArticuloID INT,
    NombreRevista VARCHAR(255),
    EditorRevista VARCHAR(255),
    AñoInicioPublicacion INT,
    FrecuenciaPublicacion VARCHAR(50),
    TemasCubiertos VARCHAR(255),
    NumeroRevista VARCHAR(50),
    PaginasArticulo VARCHAR(50),
    FOREIGN KEY (ArticuloID) REFERENCES Articulos(ArticuloID)
);

-- Insertar datos ficticios

-- Datos de Artículos
INSERT INTO Articulos (ArticuloID, Titulo, PalabrasClave, CopiaDisponible, UbicacionCopia, TipoPublicacion, FechaPublicacion)
VALUES
    (1, 'Avances en Inteligencia Artificial', 'IA, Machine Learning', TRUE, 'Estantería 1', 'Revista Científica', '2023-09-15'),
    (2, 'Nuevas Tendencias en Robótica', 'Robótica, Automatización', FALSE, NULL, 'Actas de Congresos', '2023-08-10'),
    (3, 'Informe de Investigación sobre Energía Sostenible', 'Energía, Sostenibilidad', TRUE, 'Oficina Dr. Smith', 'Informe Técnico', '2023-07-20');

-- Datos de Autores
INSERT INTO Autores (AutorID, NombreAutor, CorreoElectronico, CentroInvestigacion)
VALUES
    (101, 'Dr. John Smith', 'john.smith@email.com', 'Centro de Investigación de Energía'),
    (102, 'Dra. Maria García', 'maria.garcia@email.com', 'Instituto de Robótica'),
    (103, 'Ing. Laura Pérez', 'laura.perez@email.com', 'Laboratorio de IA');

-- Datos de Información Adicional de Autores
INSERT INTO InfoAutores (InfoAutorID, AutorID, TemasInvestigacion)
VALUES
    (201, 101, 'Energía Solar, Almacenamiento de Energía'),
    (202, 102, 'Robótica Médica, Automatización Industrial'),
    (203, 103, 'Aprendizaje Profundo, Procesamiento de Lenguaje Natural');

-- Datos de Informes Técnicos
INSERT INTO InformesTecnicos (InformeID, ArticuloID, NumeroInforme, CentroPublicacion)
VALUES
    (301, 3, 'INF-2023-001', 'Centro de Investigación de Energía');

-- Datos de Actas de Congresos
INSERT INTO ActasCongresos (ActaID, ArticuloID, NombreCongreso, EdicionCongreso, UbicacionCongreso, TipoCongreso, FrecuenciaCongreso, PaisCongreso, AñoPrimeraEdicionCongreso)
VALUES
    (401, 2, 'Congreso de Robótica 2023', 'XXVII', 'Ciudad A', 'Internacional', 'Anual', 'País X', 1997),
    (402, 2, 'Congreso de Robótica 2023', 'XXVII', 'Ciudad A', 'Internacional', 'Anual', 'País X', 1997);

-- Datos de Revistas Científicas
INSERT INTO RevistasCientificas (RevistaID, ArticuloID, NombreRevista, EditorRevista, AñoInicioPublicacion, FrecuenciaPublicacion, TemasCubiertos, NumeroRevista, PaginasArticulo)
VALUES
        (501, 1, 'Journal of Renewable Energy', 'Editorial Scientifica', 2000, 'Mensual', 'Energía Sostenible', 'Vol. 30, No. 5', '512-519'),
    (502, 1, 'International Journal of Machine Learning', 'Elsevier', 1995, 'Trimestral', 'Inteligencia Artificial', 'Vol. 45, No. 2', '220-235'),
    (503, 2, 'Conference Proceedings on Robotics', 'IEEE', 1997, 'Anual', 'Robótica', 'Vol. 20, No. 3', '78-85'),
    (504, 2, 'Automation and Control Journal', 'Springer', 1996, 'Trimestral', 'Automatización Industrial', 'Vol. 15, No. 4', '210-225');

-- Esto es un ejemplo de datos ficticios. Puedes agregar más registros según sea necesario.


Ejercicio 9

La Oficina de Coordinación de la Investigación y Transferencia (OCIT) de la Universidad Jaume I (UJI) dispone de un sistema de archivos destinado a almacenar información relacionada exclusivamente con las convocatorias de ayudas públicas que están vinculadas a los proyectos financiados llevados a cabo por los grupos de investigación de la universidad. A continuación, se presenta una descripción detallada de la información contenida en los archivos relacionados con estas convocatorias de ayudas.

El archivo de convocatorias almacena datos relativos a las distintas convocatorias de ayudas destinadas a la realización de proyectos de investigación. Para cada convocatoria, se registra la fecha de publicación, la entidad que la promueve, el programa en el que se enmarca el proyecto, la fecha límite de presentación de solicitudes, el número de identificación único de la convocatoria dentro de cada programa, la dirección web donde se puede obtener información adicional sobre la misma, así como el número de Boletín Oficial del Estado (BOE) o Diario Oficial de la Generalitat Valenciana (DOGV) en el que se ha publicado. Además, se conserva la fecha de resolución, que corresponde al día en que se publica la lista de solicitudes aprobadas. Un archivo separado contiene información sobre cada entidad patrocinadora, incluyendo su nombre, dirección, ubicación geográfica, código postal y número de teléfono.

El archivo de solicitudes almacena datos relacionados con las solicitudes presentadas por los grupos de investigación para diversas convocatorias de ayudas destinadas a proyectos. Para cada solicitud, se registra información pertinente acerca de la convocatoria a la que corresponde, incluyendo detalles sobre la entidad patrocinadora, el programa, el número de identificación y la fecha de dicha convocatoria. Asimismo, se guarda la fecha en que se presentó la solicitud, el título único del proyecto, el nombre del investigador principal y su departamento. En el caso de que se haya publicado la resolución, se incluye la fecha correspondiente, indicando si la solicitud fue aprobada. Otros datos contenidos en este archivo abarcan el monto económico solicitado para la ejecución del proyecto, los nombres de los miembros del grupo de investigación involucrados, así como las horas semanales que cada uno de ellos dedicará al proyecto, las cuales pueden variar debido a la participación en otros proyectos simultáneamente. También se registran las fechas previstas de inicio y finalización del proyecto, su duración en meses y, por último, el número de entrada otorgado por el registro general a la solicitud.

En la futura base de datos, se pretende también incluir información sobre los grupos de investigación en la universidad, incluyendo su nombre, el investigador responsable y los integrantes del grupo. Para cada miembro, se registrarán el nombre, el departamento y el área de conocimiento dentro del departamento. Se considera que un grupo de investigación está asociado al departamento del investigador responsable, aunque algunos de sus miembros pueden pertenecer a otros departamentos. Además, se buscará obtener información sobre los directores de departamento, incluyendo sus nombres.

-- Creación de la tabla de Convocatorias
CREATE TABLE Convocatorias (
    Convocatoria_ID INT PRIMARY KEY,
    Fecha_Publicacion DATE,
    Entidad_Promotora VARCHAR(255),
    Programa VARCHAR(255),
    Fecha_Limite_Solicitud DATE,
    Numero_Identificacion_Programa INT,
    URL_Informacion_Adicional VARCHAR(255),
    Numero_BOE_DOGV INT,
    Fecha_Resolucion DATE
);

-- Ejemplo de inserción de datos en la tabla de Convocatorias
INSERT INTO Convocatorias (Convocatoria_ID, Fecha_Publicacion, Entidad_Promotora, Programa, Fecha_Limite_Solicitud, Numero_Identificacion_Programa, URL_Informacion_Adicional, Numero_BOE_DOGV, Fecha_Resolucion)
VALUES
    (1, '2023-01-15', 'Ministerio de Ciencia', 'Proyecto de Investigación', '2023-02-28', 12345, 'http://www.ejemplo.com/convocatoria1', 5678, '2023-04-10'),
    (2, '2023-02-20', 'Gobierno Autónomo de Valencia', 'Becas de Investigación', '2023-03-31', 54321, 'http://www.ejemplo.com/convocatoria2', 9876, NULL);

-- Creación de la tabla de Entidades_Patrocinadoras
CREATE TABLE Entidades_Patrocinadoras (
    Entidad_ID INT PRIMARY KEY,
    Nombre_Entidad VARCHAR(255),
    Direccion VARCHAR(255),
    Ubicacion_Geografica VARCHAR(255),
    Codigo_Postal VARCHAR(10),
    Telefono VARCHAR(20)
);

-- Ejemplo de inserción de datos en la tabla de Entidades_Patrocinadoras
INSERT INTO Entidades_Patrocinadoras (Entidad_ID, Nombre_Entidad, Direccion, Ubicacion_Geografica, Codigo_Postal, Telefono)
VALUES
    (1, 'Fundación XYZ', 'Calle Principal 123', 'Valencia', '46001', '123-456-7890'),
    (2, 'Ministerio de Ciencia', 'Avenida Central 456', 'Madrid', '28001', '987-654-3210');

-- Creación de la tabla de Solicitudes
CREATE TABLE Solicitudes (
    Solicitud_ID INT PRIMARY KEY,
    Convocatoria_ID INT,
    Fecha_Presentacion DATE,
    Titulo_Proyecto VARCHAR(255),
    Investigador_Principal VARCHAR(255),
    Departamento_Investigador VARCHAR(255),
    Fecha_Resolucion DATE,
    Aprobada BOOLEAN,
    Monto_Solicitado DECIMAL(10, 2)
);

-- Ejemplo de inserción de datos en la tabla de Solicitudes
INSERT INTO Solicitudes (Solicitud_ID, Convocatoria_ID, Fecha_Presentacion, Titulo_Proyecto, Investigador_Principal, Departamento_Investigador, Fecha_Resolucion, Aprobada, Monto_Solicitado)
VALUES
    (1, 1, '2023-02-15', 'Investigación en Biología', 'Dr. Juan Pérez', 'Departamento de Biología', '2023-04-10', TRUE, 50000.00),
    (2, 2, '2023-03-25', 'Proyecto de Química', 'Dra. María García', 'Departamento de Química', NULL, FALSE, 75000.00);

-- Creación de otras tablas y datos ficticios (Miembros_Grupo_Investigacion, Grupos_Investigacion, Integrantes_Grupo, Directores_Departamento) seguiría un proceso similar.

Ejercicio 10

Se requiere el diseño de una base de datos destinada a proporcionar utilidad a los concesionarios de automóviles. Cada concesionario tiene la capacidad de vender vehículos de múltiples marcas, como Audi y Volkswagen. La base de datos tiene como objetivo mantener información detallada sobre estos automóviles, incluyendo la marca, modelo, precio, descuentos aplicables (si los hubiera) y datos técnicos relevantes como la potencia fiscal y la cilindrada.

Para cada modelo de automóvil, se busca registrar tanto las características estándar de equipamiento (por ejemplo, airbag del conductor y cierre centralizado) como los extras opcionales disponibles para su inclusión (como aire acondicionado, airbag del acompañante, pintura metalizada, etc.), junto con los precios asociados a cada uno de estos extras. Es importante destacar que lo que constituye equipamiento estándar en algunos modelos puede ser considerado un extra opcional en otros, lo que hace necesario gestionar esta variabilidad.

El concesionario mantiene un inventario de automóviles de diferentes modelos, cada uno identificado por su número de bastidor. Estos vehículos pueden estar físicamente ubicados en el concesionario o en los servicios oficiales vinculados al mismo. Cada servicio oficial se considera también un punto de venta de automóviles y está asociado a un concesionario que suministra los vehículos para su exposición y venta. Se almacenan datos como el nombre del servicio oficial, su dirección y su número de identificación fiscal (NIF).

Cuando se produce la venta de un automóvil, se desea conocer quién fue el vendedor responsable. Esto puede ser un miembro del equipo de ventas del concesionario o un representante de un servicio oficial. La base de datos también registra el precio de venta, el método de pago utilizado (ya sea pago al contado o financiamiento), así como información detallada sobre los extras incluidos en la venta, incluyendo sus precios individuales. Otros datos relevantes abarcan la fecha de entrega del automóvil, la matrícula asignada y si el vehículo estaba en stock o si fue necesario hacer un pedido a fábrica para satisfacer la venta. Para los vendedores, se almacenan sus datos personales, como nombre, número de identificación fiscal (NIF), dirección, etc., además de llevar un registro de las ventas que han realizado.

Con esta base de datos, se busca brindar un sistema completo y eficiente para gestionar la información crítica relacionada con la venta de automóviles, lo que permitirá a los concesionarios llevar a cabo sus operaciones de manera más efectiva y satisfacer las necesidades de sus clientes.

-- Creación de la tabla Marcas
CREATE TABLE Marcas (
    Marca_ID INT PRIMARY KEY,
    Nombre_Marca VARCHAR(255)
);

-- Inserción de datos en la tabla Marcas
INSERT INTO Marcas (Marca_ID, Nombre_Marca)
VALUES
    (1, 'Audi'),
    (2, 'Volkswagen');

-- Creación de la tabla Modelos
CREATE TABLE Modelos (
    Modelo_ID INT PRIMARY KEY,
    Marca_ID INT,
    Nombre_Modelo VARCHAR(255),
    Precio_Base DECIMAL(10, 2),
    Potencia_Fiscal INT,
    Cilindrada INT
);

-- Inserción de datos en la tabla Modelos
INSERT INTO Modelos (Modelo_ID, Marca_ID, Nombre_Modelo, Precio_Base, Potencia_Fiscal, Cilindrada)
VALUES
    (1, 1, 'A3', 30000.00, 10, 1800),
    (2, 1, 'Q5', 45000.00, 12, 2000),
    (3, 2, 'Golf', 28000.00, 9, 1600),
    (4, 2, 'Tiguan', 35000.00, 11, 2000);

-- Creación de la tabla Equipamiento
CREATE TABLE Equipamiento (
    Equipamiento_ID INT PRIMARY KEY,
    Modelo_ID INT,
    Nombre_Equipamiento VARCHAR(255),
    Precio_Extra DECIMAL(10, 2)
);

-- Inserción de datos en la tabla Equipamiento
INSERT INTO Equipamiento (Equipamiento_ID, Modelo_ID, Nombre_Equipamiento, Precio_Extra)
VALUES
    (1, 1, 'Aire Acondicionado', 1500.00),
    (2, 1, 'Pintura Metalizada', 1000.00),
    (3, 2, 'Asientos de Cuero', 2000.00),
    (4, 3, 'Navegación GPS', 1200.00);

-- Creación de la tabla Vehiculos
CREATE TABLE Vehiculos (
    Bastidor VARCHAR(17) PRIMARY KEY,
    Modelo_ID INT,
    Estado VARCHAR(20),
    Matricula VARCHAR(10),
    Fecha_Entrega DATE
);

-- Inserción de datos en la tabla Vehiculos
INSERT INTO Vehiculos (Bastidor, Modelo_ID, Estado, Matricula, Fecha_Entrega)
VALUES
    ('WAUZZZ8V0CA123456', 1, 'En Stock', '1234ABC', '2023-09-15'),
    ('WAUZZZ8V0CA789012', 2, 'Pedido a Fábrica', NULL, NULL),
    ('WVWZZZ1K0CW345678', 3, 'En Stock', '5678XYZ', '2023-08-25');

-- Creación de la tabla Servicios_Oficiales
CREATE TABLE Servicios_Oficiales (
    NIF VARCHAR(9) PRIMARY KEY,
    Nombre_Servicio_Oficial VARCHAR(255),
    Direccion VARCHAR(255),
    Concesionario_ID INT
);

-- Inserción de datos en la tabla Servicios_Oficiales
INSERT INTO Servicios_Oficiales (NIF, Nombre_Servicio_Oficial, Direccion, Concesionario_ID)
VALUES
    ('A12345678', 'Servicio Audi Valencia', 'Calle Audi 123, Valencia', 1),
    ('V98765432', 'Servicio VW Barcelona', 'Avenida VW 456, Barcelona', 2);

-- Creación de la tabla Concesionarios
CREATE TABLE Concesionarios (
    Concesionario_ID INT PRIMARY KEY,
    Nombre_Concesionario VARCHAR(255),
    Direccion VARCHAR(255),
    NIF VARCHAR(9),
    Metodo_Pago VARCHAR(20)
);

-- Inserción de datos en la tabla Concesionarios
INSERT INTO Concesionarios (Concesionario_ID, Nombre_Concesionario, Direccion, NIF, Metodo_Pago)
VALUES
    (1, 'Concesionario Audi Valencia', 'Calle Audi 123, Valencia', 'A98765432', 'Contado'),
    (2, 'Concesionario VW Barcelona', 'Avenida VW 456, Barcelona', 'V12345678', 'Financiamiento');

-- Creación de la tabla Vendedores
CREATE TABLE Vendedores (
    Vendedor_ID INT PRIMARY KEY,
    Nombre_Vendedor VARCHAR(255),
    NIF VARCHAR(9),
    Direccion VARCHAR(255)
);

-- Inserción de datos en la tabla Vendedores
INSERT INTO Vendedores (Vendedor_ID, Nombre_Vendedor, NIF, Direccion)
VALUES
    (1, 'Juan Pérez', 'P1234567X', 'Calle Vendedor 1, Valencia'),
    (2, 'María López', 'P7654321Y', 'Avenida Vendedor 2, Barcelona');

-- Creación de la tabla Ventas
CREATE TABLE Ventas (
    Venta_ID INT PRIMARY KEY,
    Vehiculo_Bastidor VARCHAR(17),
    Vendedor_ID INT,
    Precio_Venta DECIMAL(10, 2),
    Metodo_Pago VARCHAR(20),
    Fecha_Venta DATE
);

-- Inserción de datos en la tabla Ventas
INSERT INTO Ventas (Venta_ID, Vehiculo_Bastidor, Vendedor_ID, Precio_Venta, Metodo_Pago, Fecha_Venta)
VALUES
    (1, 'WAUZZZ8V0CA123456', 1, 31500.00, 'Contado', '2023-09-20'),
    (2, 'WVWZZZ1K0CW345678', 2, 32000.00, 'Financiamiento', '2023-09-18');

Ejercicio 11

Se pretende desarrollar una base de datos destinada a la gestión de información relacionada con médicos, empleados y pacientes de un centro de salud. En cuanto a los médicos, se busca almacenar datos como su nombre, dirección, número de teléfono, lugar de residencia (población y provincia), código postal, número de identificación fiscal (NIF), número de seguridad social y su estado laboral, que puede ser médico titular, médico interino o médico sustituto. Cada médico tiene asignado un horario de consulta, que puede variar de un día a otro de la semana. En el caso de los médicos sustitutos, sus datos no se eliminan cuando finaliza una sustitución, sino que se registra una fecha de baja. Por lo tanto, un médico sustituto puede tener múltiples fechas de alta y baja, dependiendo de las sustituciones que haya llevado a cabo. Si la fecha de alta más reciente es posterior a la fecha de baja más reciente, se indica que el médico se encuentra realizando una sustitución en el centro de salud en ese momento.

En relación a los demás empleados, que incluyen a ATS (Auxiliares Técnicos Sanitarios), ATS de zona, auxiliares de enfermería, celadores y administrativos, se busca almacenar información básica como su nombre, dirección, número de teléfono, lugar de residencia (población y provincia), código postal, número de identificación fiscal (NIF) y número de seguridad social.

Para todos los médicos y empleados, se mantiene un registro de los períodos de vacaciones planificados y de aquellos que ya han sido disfrutados.

Finalmente, en cuanto a los pacientes, se recopila información como su nombre, dirección, número de teléfono, código postal, número de identificación fiscal (NIF), número de seguridad social y el médico asignado que les corresponde para su atención médica. Esta base de datos permitirá una gestión eficiente de los recursos y una atención adecuada a los pacientes dentro del centro de salud.

-- Crear la tabla Médicos
CREATE TABLE Medicos (
    ID_Medico INT AUTO_INCREMENT PRIMARY KEY,
    Nombre VARCHAR(255),
    Direccion VARCHAR(255),
    Telefono VARCHAR(15),
    Poblacion VARCHAR(100),
    Provincia VARCHAR(100),
    CodigoPostal VARCHAR(10),
    NIF VARCHAR(15),
    NumSeguridadSocial VARCHAR(20),
    EstadoLaboral ENUM('Médico titular', 'Médico interino', 'Médico sustituto'),
    FechaAlta DATE,
    FechaBaja DATE,
    CONSTRAINT chk_fechas CHECK (FechaAlta IS NULL OR FechaBaja IS NULL OR FechaAlta <= FechaBaja)
);

-- Crear la tabla Horario_Consulta
CREATE TABLE Horario_Consulta (
    ID_Horario INT AUTO_INCREMENT PRIMARY KEY,
    ID_Medico INT,
    DiaSemana VARCHAR(20),
    HoraInicio TIME,
    HoraFin TIME,
    FOREIGN KEY (ID_Medico) REFERENCES Medicos (ID_Medico)
);

-- Crear la tabla Empleados
CREATE TABLE Empleados (
    ID_Empleado INT AUTO_INCREMENT PRIMARY KEY,
    Nombre VARCHAR(255),
    Direccion VARCHAR(255),
    Telefono VARCHAR(15),
    Poblacion VARCHAR(100),
    Provincia VARCHAR(100),
    CodigoPostal VARCHAR(10),
    NIF VARCHAR(15),
    NumSeguridadSocial VARCHAR(20)
);

-- Crear la tabla Vacaciones
CREATE TABLE Vacaciones (
    ID_Vacaciones INT AUTO_INCREMENT PRIMARY KEY,
    ID_Medico INT,
    ID_Empleado INT,
    FechaInicio DATE,
    FechaFin DATE,
    Planificado BOOLEAN,
    FOREIGN KEY (ID_Medico) REFERENCES Medicos (ID_Medico),
    FOREIGN KEY (ID_Empleado) REFERENCES Empleados (ID_Empleado)
);

-- Crear la tabla Pacientes
CREATE TABLE Pacientes (
    ID_Paciente INT AUTO_INCREMENT PRIMARY KEY,
    Nombre VARCHAR(255),
    Direccion VARCHAR(255),
    Telefono VARCHAR(15),
    CodigoPostal VARCHAR(10),
    NIF VARCHAR(15),
    NumSeguridadSocial VARCHAR(20),
    ID_Medico_Asignado INT,
    FOREIGN KEY (ID_Medico_Asignado) REFERENCES Medicos (ID_Medico)
);

-- Insertar datos ficticios en la tabla Médicos
INSERT INTO Medicos (Nombre, Direccion, Telefono, Poblacion, Provincia, CodigoPostal, NIF, NumSeguridadSocial, EstadoLaboral, FechaAlta, FechaBaja)
VALUES
    ('Dr. Juan Pérez', 'Calle Principal 123', '555-123-456', 'Ciudad A', 'Provincia X', '12345', '123456789A', '123456789', 'Médico titular', '2023-01-15', NULL),
    ('Dr. María López', 'Avenida Central 456', '555-987-654', 'Ciudad B', 'Provincia Y', '54321', '987654321B', 'Médico interino', '2023-02-10', NULL),
    ('Dr. Pedro Sánchez', 'Calle Secundaria 789', '555-789-123', 'Ciudad C', 'Provincia Z', '67890', '789123456C', 'Médico sustituto', '2023-03-20', '2023-04-15');

-- Insertar datos ficticios en la tabla Horario_Consulta
INSERT INTO Horario_Consulta (ID_Medico, DiaSemana, HoraInicio, HoraFin)
VALUES
    (1, 'Lunes', '08:00:00', '12:00:00'),
    (1, 'Martes', '08:00:00', '12:00:00'),
    (2, 'Miércoles', '09:00:00', '13:00:00'),
    (2, 'Jueves', '09:00:00', '13:00:00');

-- Insertar datos ficticios en la tabla Empleados
INSERT INTO Empleados (Nombre, Direccion, Telefono, Poblacion, Provincia, CodigoPostal, NIF, NumSeguridadSocial)
VALUES
    ('Ana Martínez', 'Calle Empleado 1', '555-111-111', 'Ciudad D', 'Provincia W', '11111', '111111111E', '111111111'),
    ('Luis Rodríguez', 'Avenida Empleado 2', '555-222-222', 'Ciudad E', 'Provincia X', '22222', '222222222F', '222222222');

-- Insertar datos ficticios en la tabla Vacaciones
INSERT INTO Vacaciones (ID_Medico, FechaInicio, FechaFin, Planificado)
VALUES
    (1, '2023-07-01', '2023-07-15', true),
    (1, '2023-12-20', '2024-01-05', true),
    (2, '2023-08-10', '2023-08-20', true);

-- Insertar datos ficticios en la tabla Pacientes
INSERT INTO Pacientes (Nombre, Direccion, Telefono, CodigoPostal, NIF, NumSeguridadSocial, ID_Medico_Asignado)
VALUES
    ('Paciente 1', 'Calle Paciente 123', '555-333-333', '33333', '333333333G', '333333333', 1),
    ('Paciente 2', 'Avenida Paciente 456', '555-444-444', '44444', '444444444H', '444444444', 2);

Ejercicio 12

Una agencia de publicidad busca llevar un control detallado de los patrocinadores que se anuncian en la programación semanal de las emisoras de radio donde tienen contratos publicitarios.

Respecto a las emisoras de radio, se busca registrar su Número de Identificación Fiscal (NIF), nombre, dirección postal, el nombre de su director y la frecuencia de radio por la cual transmiten, la cual es exclusiva dentro de la provincia en la que se ubican. Estas emisoras pueden asociarse en cadenas de radio con el objetivo de compartir parte de su programación semanal. Cada cadena se distingue por un nombre representativo, y su sede central puede ser cualquiera de las emisoras de la cadena, aunque su director no necesariamente coincide con el director de esa emisora. Además, las cadenas de radio están vinculadas a empresas de medios de comunicación, las cuales pueden controlar múltiples cadenas de radio. De estas empresas se desea conocer su NIF, nombre, el nombre de su director y su dirección postal.

En cuanto a la programación de radio, un programa puede emitirse en una o varias franjas horarias, con cada franja caracterizada por su hora de inicio, el día de la semana en que se transmite y su duración. Cada programa puede ser emitido en todas las emisoras de una cadena o ser parte de la programación local de una emisora. Se busca registrar el nombre único del programa y el nombre de la persona responsable de su producción. Asimismo, un programa puede incluir publicidad de diversos patrocinadores, donde la duración de dicha publicidad se mide en segundos por semana. El costo de esta publicidad se calcula multiplicando esta duración por el precio por segundo asociado al programa de radio. Cada patrocinador se identifica por un número de contrato con la empresa de publicidad, y se registran datos como el nombre del patrocinador, la duración del contrato y su importe correspondiente.

Esta base de datos permitirá a la agencia de publicidad gestionar de manera efectiva y organizada la información relacionada con sus acuerdos de patrocinio en las emisoras de radio, así como el seguimiento de los programas y franjas horarias en las que se difunde la publicidad contratada.

-- Crear tabla Emisoras_de_Radio
CREATE TABLE Emisoras_de_Radio (
    NIF VARCHAR(15) PRIMARY KEY,
    Nombre VARCHAR(255),
    Direccion_Postal VARCHAR(255),
    Director VARCHAR(255),
    Frecuencia VARCHAR(50)
);

-- Crear tabla Cadenas_de_Radio
CREATE TABLE Cadenas_de_Radio (
    ID_Cadena INT AUTO_INCREMENT PRIMARY KEY,
    Nombre_Representativo VARCHAR(255),
    ID_Emisora VARCHAR(15),
    ID_Empresa_Medios VARCHAR(15),
    FOREIGN KEY (ID_Emisora) REFERENCES Emisoras_de_Radio(NIF),
    FOREIGN KEY (ID_Empresa_Medios) REFERENCES Empresas_de_Medios(NIF)
);

-- Crear tabla Empresas_de_Medios
CREATE TABLE Empresas_de_Medios (
    NIF VARCHAR(15) PRIMARY KEY,
    Nombre VARCHAR(255),
    Direccion_Postal VARCHAR(255),
    Director VARCHAR(255)
);

-- Crear tabla Programas_de_Radio
CREATE TABLE Programas_de_Radio (
    ID_Programa INT AUTO_INCREMENT PRIMARY KEY,
    Nombre_Unico_Programa VARCHAR(255),
    Responsable_Produccion VARCHAR(255)
);

-- Crear tabla Franjas_Horarias
CREATE TABLE Franjas_Horarias (
    ID_Franja INT AUTO_INCREMENT PRIMARY KEY,
    Hora_Inicio TIME,
    Dia_Semana VARCHAR(20),
    Duracion_Segundos INT,
    ID_Programa INT,
    ID_Cadena INT,
    ID_Emisora VARCHAR(15),
    FOREIGN KEY (ID_Programa) REFERENCES Programas_de_Radio(ID_Programa),
    FOREIGN KEY (ID_Cadena) REFERENCES Cadenas_de_Radio(ID_Cadena),
    FOREIGN KEY (ID_Emisora) REFERENCES Emisoras_de_Radio(NIF)
);

-- Crear tabla Patrocinadores
CREATE TABLE Patrocinadores (
    Numero_Contrato INT PRIMARY KEY,
    Nombre_Patrocinador VARCHAR(255),
    Duracion_Contrato INT,
    Importe DECIMAL(10, 2),
    ID_Programa INT,
    FOREIGN KEY (ID_Programa) REFERENCES Programas_de_Radio(ID_Programa)
);

-- Insertar datos ficticios en la tabla Emisoras_de_Radio
INSERT INTO Emisoras_de_Radio (NIF, Nombre, Direccion_Postal, Director, Frecuencia)
VALUES
    ('ES1234567A', 'Radio Ciudad A', 'Calle Principal 123', 'Juan Pérez', '98.5 FM'),
    ('ES7890123B', 'Radio Pueblo B', 'Avenida Central 456', 'María López', '102.7 FM'),
    ('ES4567890C', 'Radio Villa C', 'Calle Secundaria 789', 'Pedro Sánchez', '107.3 FM');

-- Insertar datos ficticios en la tabla Cadenas_de_Radio
INSERT INTO Cadenas_de_Radio (Nombre_Representativo, ID_Emisora, ID_Empresa_Medios)
VALUES
    ('Grupo Radio A', 'ES1234567A', 'ES123456789X'),
    ('Grupo Radio B', 'ES7890123B', 'ES234567890Y'),
    ('Grupo Radio C', 'ES4567890C', 'ES345678901Z');

-- Insertar datos ficticios en la tabla Empresas_de_Medios
INSERT INTO Empresas_de_Medios (NIF, Nombre, Direccion_Postal, Director)
VALUES
    ('ES123456789X', 'MediaCorp', 'Calle Medios 1', 'Ana Martínez'),
    ('ES234567890Y', 'Radios Unidos', 'Avenida Medios 2', 'Luis Rodríguez'),
    ('ES345678901Z', 'RadioMega', 'Calle Comunicación 3', 'Laura Gómez');

-- Insertar datos ficticios en la tabla Programas_de_Radio
INSERT INTO Programas_de_Radio (Nombre_Unico_Programa, Responsable_Produccion)
VALUES
    ('Mañana en la Ciudad', 'Carlos Rodríguez'),
    ('Noticias del Día', 'Ana López'),
    ('Música para el Alma', 'David Pérez');

-- Insertar datos ficticios en la tabla Franjas_Horarias
INSERT INTO Franjas_Horarias (Hora_Inicio, Dia_Semana, Duracion_Segundos, ID_Programa, ID_Cadena, ID_Emisora)
VALUES
    ('08:00:00', 'Lunes', 3600, 1, 1, 'ES1234567A'),
    ('12:00:00', 'Martes', 3600, 2, 2, 'ES7890123B'),
    ('15:00:00', 'Miércoles', 3600, 3, 3, 'ES4567890C');

-- Insertar datos ficticios en la tabla Patrocinadores
INSERT INTO Patrocinadores (Numero_Contrato, Nombre_Patrocinador, Duracion_Contrato, Importe, ID_Programa)
VALUES
    (1, 'ABC Inc.', 180, 5000.00, 1),
    (2, 'XYZ Corp.', 90, 3000.00, 2),
    (3, 'PQR Ltda.', 120, 4000.00, 3);

Marco Antonio
Marco Antonio
Marco Antonio es un Analista de Sistemas y apasionado por la programación y el diseño web, fundó AnthonCode para fusionar su experiencia técnica con la creatividad. Como redactor y desarrollador, se enfoca en crear soluciones digitales innovadoras y efectivas.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *