Bases de datos
Modelo Entidad Relacion Agencia de Management
Una empresa discográfica necesita modelar los datos sobre sus diferentes recursos según las siguientes características:
Manager: de cada mánager se almacena un identificador de manager y su nombre. Un manager representa a una serie de artistas.
Artista: un artista es representado por un manager. De los artistas se almacena su nombre completo (usando un único atributo) y su NIF.
Evento de promoción: los artistas participan en eventos de promoción para dar a conocer sus trabajos. En un evento de promoción pueden participar varios artistas. De un evento se almacena un identificador único, la fecha de celebración y el número de asistentes.
Se pide:
Dibuje un Diagrama E/R que modele la base de datos descrita, usando un conjunto de entidades para cada uno de los conceptos anteriores (es decir, su diseño debe tener 3 conjuntos de entidades).
Modelo Entidad Relación
Entidades y Atributos
Entidad: MANAGER
+--------------+
| MANAGER |
+--------------+
|
|----(⚫) id_manager (PK)
|----(⚪) nombre
- (⚫)
id_manager
: Clave Primaria (PK), Identificador único del mánager. - (⚪)
nombre
: Nombre del mánager.
Entidad: ARTISTA
--------------
| ARTISTA |
--------------
|
|----(⚫) nif (PK)
|----(⚪) nombre_completo
- (⚫)
nif
: Clave Primaria (PK), NIF del artista. - (⚪)
nombre_completo
: Nombre completo del artista.
Entidad: EVENTO
--------
| EVENTO |
--------
|
|----(⚫) id_evento (PK)
|----(⚪) fecha_celebracion
|----(⚪) num_asistentes
- (⚫)
id_evento
: Clave Primaria (PK), Identificador único del evento. - (⚪)
fecha_celebracion
: Fecha de celebración del evento. - (⚪)
num_asistentes
: Número de asistentes al evento.
Relaciones
- Relación:
representa
- Entre:
MANAGER
yARTISTA
- Cardinalidad: 1:N (Uno a Muchos)
- Un
MANAGER
representa a NARTISTA
. - Un
ARTISTA
es representado por 1MANAGER
.
- Un
- Visualización: Una línea conectando
MANAGER
yARTISTA
, con marcas de cardinalidad (1 en el ladoMANAGER
, N en el ladoARTISTA
).
- Entre:
- Relación:
participa
- Entre:
ARTISTA
yEVENTO
- Cardinalidad: N:M (Muchos a Muchos)
- Un
ARTISTA
participa en MEVENTO
. - Un
EVENTO
tiene NARTISTA
participantes.
- Un
- Visualización: Una línea (o un rombo representando la relación) conectando
ARTISTA
yEVENTO
, con marcas de cardinalidad (N en el ladoARTISTA
, M en el ladoEVENTO
). - Nota de Implementación Relacional: Esta relación requeriría una tabla asociativa intermedia (ej.
PARTICIPA
) en la base de datos. Esta tabla contendría las claves foráneasartista_nif
yevento_id
, formando su clave primaria compuesta, y tendría relaciones 1:N conARTISTA
yEVENTO
.
- Entre:
Modelo Relacional
erDiagram
MANAGER {
INT id_manager PK "Identificador único del mánager"
VARCHAR nombre "Nombre del mánager"
}
ARTISTA {
VARCHAR nif PK "NIF del artista (clave primaria)"
VARCHAR nombre_completo "Nombre completo del artista"
INT id_manager FK "ID del mánager que lo representa"
}
EVENTO {
INT id_evento PK "Identificador único del evento"
DATE fecha_celebracion "Fecha de celebración del evento"
INT num_asistentes "Número de asistentes al evento"
}
PARTICIPA {
VARCHAR artista_nif FK "NIF del artista participante"
INT evento_id FK "ID del evento en que participa"
}
MANAGER ||--o{ ARTISTA: representa
ARTISTA }o--o| PARTICIPA: partiicpa
EVENTO ||--o{ PARTICIPA: evento
Explicación del Diagrama
Este diagrama modela la estructura de datos descrita para la empresa discográfica, identificando las entidades principales, sus atributos y las relaciones entre ellas.
Entidades
Se identifican las siguientes entidades principales:
MANAGER
:- Representa a los mánagers de la discográfica.
- Atributos principales:
id_manager
: Identificador único (Clave Primaria - PK).nombre
: Nombre del mánager.
ARTISTA
:- Representa a los artistas musicales.
- Atributos principales:
nif
: Número de Identificación Fiscal del artista (se asume como Clave Primaria - PK por unicidad).nombre_completo
: Nombre completo del artista.id_manager
: Identificador del mánager que representa al artista (Clave Foránea - FK que referencia aMANAGER
).
EVENTO
:- Representa los eventos de promoción organizados.
- Atributos principales:
id_evento
: Identificador único del evento (Clave Primaria - PK).fecha_celebracion
: Fecha en la que se realiza el evento.num_asistentes
: Número de personas que asistieron al evento.
Tabla Intermedia (para relación N:M)
PARTICIPA
:- Esta tabla es necesaria para implementar la relación “muchos a muchos” entre
ARTISTA
yEVENTO
. - Registra qué artista participa en qué evento.
- Atributos principales:
artista_nif
: NIF del artista participante (Clave Foránea - FK que referencia aARTISTA
).evento_id
: ID del evento en el que participa (Clave Foránea - FK que referencia aEVENTO
).
- La combinación de
artista_nif
yevento_id
suele formar la Clave Primaria compuesta de esta tabla para asegurar que un artista no se registre dos veces en el mismo evento.
- Esta tabla es necesaria para implementar la relación “muchos a muchos” entre
Relaciones
Se establecen las siguientes relaciones basadas en la descripción:
MANAGER
1–NARTISTA
:- Descripción: Un mánager representa a uno o varios artistas. Un artista es representado por exactamente un mánager.
- Tipo: Uno a Muchos.
- Implementación: A través de la clave foránea
id_manager
en la tablaARTISTA
.
ARTISTA
N–MEVENTO
:- Descripción: Un artista puede participar en muchos eventos de promoción. Un evento de promoción puede tener la participación de varios artistas.
- Tipo: Muchos a Muchos.
- Implementación: Se realiza mediante la tabla intermedia
PARTICIPA
. Esta tabla tiene una relación Uno a Muchos conARTISTA
(un artista puede estar en muchas filas dePARTICIPA
) y una relación Uno a Muchos conEVENTO
(un evento puede estar en muchas filas dePARTICIPA
).
Este modelo refleja la estructura descrita en el texto, utilizando las entidades requeridas y resolviendo la relación muchos a muchos de forma estándar para bases de datos relacionales.
Tabla | Atributos | Foreign Key |
---|---|---|
Evento | Id, Asistentes, Fecha | |
Artista | NIF, Nombre, N_Man | N_Man (Manager) |
Manager | N_Man, Nombre | |
Participa | Id_Evento, NIF_Artista | Id_Evento (Evento), NIF_Artista (Artista) |
Modelo Físico
-- --- TABLAS PARA LA BASE DE DATOS DE LA DISCOGRÁFICA ---
-- Nota: El orden de creación es importante debido a las claves foráneas.
-- Creamos primero las tablas que no dependen de otras (Manager, Evento).
-- Tabla para los Mánagers
CREATE TABLE Manager (
id_manager INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(255) NOT NULL COMMENT 'Nombre del mánager'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tabla de Mánagers';
-- Tabla para los Eventos de Promoción
CREATE TABLE Evento (
id_evento INT AUTO_INCREMENT PRIMARY KEY,
fecha_celebracion DATE COMMENT 'Fecha de celebración del evento',
num_asistentes INT DEFAULT 0 COMMENT 'Número de asistentes al evento'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tabla de Eventos de Promoción';
-- Tabla para los Artistas (depende de Manager)
CREATE TABLE Artista (
nif VARCHAR(15) PRIMARY KEY COMMENT 'NIF único del artista',
nombre_completo VARCHAR(255) NOT NULL COMMENT 'Nombre completo del artista',
id_manager INT NOT NULL COMMENT 'FK - ID del mánager que representa al artista',
FOREIGN KEY (id_manager) REFERENCES Manager(id_manager)
ON DELETE RESTRICT -- No permitir borrar un mánager si tiene artistas asociados
ON UPDATE CASCADE -- Si el ID del mánager cambia, actualizarlo aquí
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tabla de Artistas';
-- Tabla Intermedia para la relación N:M entre Artista y Evento (depende de Artista y Evento)
CREATE TABLE Participa (
artista_nif VARCHAR(15) NOT NULL COMMENT 'FK - NIF del artista participante',
evento_id INT NOT NULL COMMENT 'FK - ID del evento en que participa',
-- Clave primaria compuesta para asegurar que un artista no participa dos veces en el mismo evento
PRIMARY KEY (artista_nif, evento_id),
FOREIGN KEY (artista_nif) REFERENCES Artista(nif)
ON DELETE CASCADE -- Si se borra un artista, se borra su registro de participación
ON UPDATE CASCADE, -- Si el NIF del artista cambia (poco probable), actualizarlo aquí
FOREIGN KEY (evento_id) REFERENCES Evento(id_evento)
ON DELETE CASCADE -- Si se borra un evento, se borran los registros de participación
ON UPDATE CASCADE -- Si el ID del evento cambia, actualizarlo aquí
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tabla de Participación Artista-Evento (Relación N:M)';
Notas sobre el Código SQL de Creación de Tablas (MySQL)
ENGINE=InnoDB
:- Esencial para que la base de datos soporte características avanzadas como claves foráneas (Foreign Keys) y transacciones, fundamentales para mantener la integridad de los datos en bases de datos relacionales.
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
:- Se recomienda para asegurar una correcta gestión y almacenamiento de un amplio rango de caracteres internacionales, incluyendo acentos, símbolos especiales y emojis.
utf8mb4
es la codificación preferida en MySQL moderno sobreutf8
.
- Se recomienda para asegurar una correcta gestión y almacenamiento de un amplio rango de caracteres internacionales, incluyendo acentos, símbolos especiales y emojis.
AUTO_INCREMENT
:- Utilizado en las columnas de clave primaria de tipo numérico (
id_manager
,id_evento
). Indica a MySQL que genere automáticamente un valor numérico único y secuencial para cada nueva fila insertada, simplificando la gestión de IDs.
- Utilizado en las columnas de clave primaria de tipo numérico (
PRIMARY KEY
:- Define la columna (o conjunto de columnas) cuyos valores identifican de forma única cada fila dentro de la tabla. No puede contener valores nulos. En la tabla
Participa
, se usa una clave primaria compuesta (artista_nif
,evento_id
).
- Define la columna (o conjunto de columnas) cuyos valores identifican de forma única cada fila dentro de la tabla. No puede contener valores nulos. En la tabla
FOREIGN KEY
:- Define una columna (o conjunto de columnas) en una tabla que referencia a la clave primaria de otra tabla. Establece y refuerza las relaciones entre tablas, garantizando la integridad referencial (por ejemplo, un
Artista
debe tener unid_manager
que exista en la tablaManager
).
- Define una columna (o conjunto de columnas) en una tabla que referencia a la clave primaria de otra tabla. Establece y refuerza las relaciones entre tablas, garantizando la integridad referencial (por ejemplo, un
ON DELETE
/ON UPDATE
:- Cláusulas asociadas a las
FOREIGN KEY
que definen el comportamiento automático cuando una fila referenciada (en la tabla “padre”) es eliminada (ON DELETE
) o su clave primaria es actualizada (ON UPDATE
):RESTRICT
: Impide la eliminación/actualización en la tabla padre si existen registros relacionados en la tabla hija. Es una opción segura por defecto.CASCADE
: Propaga la acción. Si se elimina/actualiza la fila padre, las filas relacionadas en la tabla hija también se eliminan/actualizan automáticamente. Útil para registros dependientes como los de la tablaParticipa
.SET NULL
: (No se usó en este script) Establece el valor de la clave foránea en la tabla hija aNULL
si la fila padre referenciada se elimina/actualiza. Requiere que la columna de la clave foránea permita valoresNULL
.
- Cláusulas asociadas a las
NOT NULL
:- Restricción que asegura que la columna no puede contener valores nulos; siempre debe tener un valor asignado al insertar o actualizar una fila.
VARCHAR(length)
:- Tipo de dato para almacenar cadenas de texto de longitud variable, hasta un máximo especificado por
length
. Es importante elegir una longitud máxima adecuada (ej.VARCHAR(255)
para nombres,VARCHAR(15)
como estimación para NIF).
- Tipo de dato para almacenar cadenas de texto de longitud variable, hasta un máximo especificado por
COMMENT
:- Permite añadir comentarios descriptivos directamente en la definición de las tablas y columnas dentro de la base de datos. Es una buena práctica para la documentación y comprensión del esquema.
Modificaciones en la estructura de las tablas
- Tabla Manager
Vamos a necesitar almacenar mas información en la tabla Manager
, en concreto un email y un teléfono, para ello se usa el comando DDL ALTER
. Los nuevos atributos no implican ningún tipo de restricción:
ALTER TABLE Manager ADD COLUMN email VARCHAR(100);
ALTER TABLE Manager ADD COLUMN telefono VARCHAR(10);
Para insertar datos en las tablas, se usa el comando DML INSERT
, estos ejemplos nos van a permitir realizar consultas con los criterios de selección que se requieran.
Se pueden insertar todos los valores o solo los que se especifiquen, siempre y cuando los omitidos no impliquen alguna restricción como no permitir valores nulos. En el caso siguiente, la clave primaria no es necesaria al ser auto incremental, lo que implica que se genera por si misma al introducir el resto de valores de la ocurrencia.
INSERT INTO Manager (nombre, email, telefono)
VALUES
('Juan Pérez', 'juan@example.com', '555-1001'),
('María García', 'maria@example.com', '555-1002'),
('Carlos López', 'carlos@example.com', '555-1003'),
('Ana Martínez', 'ana@example.com', '555-1004'),
('Luis Rodríguez', 'luis@example.com', '555-1005'),
('Sofía Hernández', 'sofia@example.com', '555-1006'),
('Pedro Díaz', 'pedro@example.com', '555-1007'),
('Laura Sánchez', 'laura@example.com', '555-1008'),
('Jorge Ramírez', 'jorge@example.com', '555-1009'),
('Elena Flores', 'elena@example.com', '555-1010');
- Tabla Evento
En la tabla Evento
almacenamos información relacionada con la actividad realizada, la fecha de celebración y el número de asistentes, pero no se ha recogido información sobre el precio del mismo, lo cual nos podría facilitar el montante total generado por el mismo, asi que vamos a crear una nueva columna para guardar el precio del evento.
ALTER TABLE Evento ADD COLUMN precio DECIMAL(5,2) NOT NULL;
El tipo de dato utilizado es DECIMAL
, de longitud 5 y con 2 cifras decimales, lo cual nos permite un numero máximo de 999.99, mas que suficiente para el precio de un evento, y sin permitir valores nulos.
A continuación, los datos de 10 eventos:
INSERT INTO Evento (fecha_celebracion, num_asistentes, precio)
VALUES
('2024-05-15', 120, 49.99),
('2024-06-22', 85, 35.50),
('2024-07-04', 200, 75.00),
('2024-08-12', 65, 29.99),
('2024-09-30', 150, 59.99),
('2024-10-18', 180, 65.00),
('2024-11-05', 95, 42.50),
('2024-12-15', 250, 89.99),
('2025-01-20', 70, 32.00),
('2025-02-14', 300, 99.99);
- Tabla Artista
Para la tabla Artista vamos a realizar algunas modificaciones, el nombre_completo cambiará a los campos nombre y apellidos y se añadirá un nuevo campo que almacenará el nombre artistico: nombre_artistico, ademas le añadiremos un telefono. Estas modificaciones no solo no alteran el modelo conceptual, sino que lo optimizan añadiendo mas información a nuestras tablas.
ALTER TABLE Artista RENAME COLUMN nombre_completo TO nombre;
ALTER TABLE Artista ADD COLUMN apellidos varchar(60) NOT NULL;
ALTER TABLE Artista ADD COLUMN telefono VARCHAR(10) NOT NULL;
ALTER TABLE Artista ADD COLUMN nombre_artistico VARCHAR(50) NOT NULL;
ALTER TABLE Artista MODIFY COLUMN nombre VARCHAR(15) NOT NULL;
Ahora generamos 10 ocurrencias para la tabla Artista
INSERT INTO Artista
VALUES
('12345678A', 'María', 1, 'García López', '611223344', 'Mari G.'),
('98765432B', 'Carlos', 2, 'Martínez Ruiz', '622334455', 'Carlo M.'),
('45678912C', 'Ana', 3, 'Fernández Sánchez', '633445566', 'Anita F.'),
('32165498D', 'Javier', 1, 'González Pérez', '644556677', 'Javi G.'),
('78912345E', 'Laura', 4, 'Rodríguez Gómez', '655667788', 'Lau R.'),
('65498732F', 'David', 2, 'López Martín', '666778899', 'Davi L.'),
('23456789G', 'Sofía', 3, 'Sánchez Jiménez', '677889900', 'Sofi S.'),
('87654321H', 'Pablo', 5, 'Hernández Castro', '688990011', 'Pablito H.'),
('34567891I', 'Elena', 4, 'Díaz Romero', '699001122', 'Elen D.'),
('91234567J', 'Miguel', 5, 'Moreno Alonso', '600112233', 'Migue M.');
- Tabla Participa
Insertamos 10 registros en la tabla Participa:
INSERT INTO Participa (artista_nif, evento_id)
VALUES
('12345678A', 3),
('98765432B', 7),
('45678912C', 2),
('32165498D', 5),
('78912345E', 1),
('65498732F', 8),
('23456789G', 4),
('87654321H', 10),
('34567891I', 6),
('91234567J', 9);
🌍 Descarga la Base de Datos actualizada
Consultas a la base de datos
Proximamente…