Espectáculos
Espectáculos
Requisitos
Catálogo de Requisitos
La transcripción que aparece a continuación corresponde a una entrevista realizada al gerente de un teatro para determinar los objetivos y requisitos de una aplicación web que gestione la programación anual de espectáculos y venta de entradas a dichos espectáculos.
Entrevista
- Cuestión: Para empezar, hábleme de los espectáculos. Me interesa conocer la información que debe gestionarse por parte de la aplicación web.
- Respuesta: De acuerdo, los espectáculos que se programan en nuestro teatro pueden ser de distinto tipo (p.e. “Concierto”, “Opera”, .. ). Cada espectáculo es de un tipo.
- Cuestión: ¿Qué información desea recoger de los espectáculos?
- Respuesta: Básicamente, su denominación, tipo, duración y fecha y hora en las que se representan. Un espectáculo puede tener varias representaciones.
- Cuestión: ¿Puede haber más de una representación el mismo día?
- Respuesta: Sí, hay días con más de una representación pero nunca del mismo espectáculo.
- Cuestión: ¿Algo más acerca de los espectáculos?
- Respuesta: Se me olvidaba, también quiero guardar el precio. Cada tipo de espectáculo tiene un precio de la entrada.
- Cuestión: ¿El precio varía según tipo de espectáculo?
- Respuesta: Sí, pero también depende de la zona del teatro donde esté situada la localidad.
- Cuestión: Acláreme esto, por favor.
- Respuesta: El teatro está dividido en zonas. Las localidades más caras corresponden a la zona mejor situada, es decir la zona de “Patio”. Otras zonas son “1 de Balcón”, “1 de Terraza” etc. Cada zona tiene distinto precio.
- Cuestión: En definitiva ¿el precio depende del tipo de espectáculo y zona del teatro?
- Respuesta: Así es. También quiero conocer las localidades vendidas para cada representación.
- Cuestión: ¿Hablamos de las entradas?
- Respuesta: Una entrada es una localidad para una representación. Dentro de cada zona las localidades se identifican por fila y butaca (p.e. “fila 2, butaca 3 de Patio”, “fila 2, butaca 3 de 1 de Balcón”, …)
- Cuestión: ¿Quiere que se puedan adquirir las entradas únicamente a través de la web?
- Respuesta: No, seguiremos vendiendo entradas en taquilla. Además algunas entadas se regalan como invitación. Necesito saber el medio o canal por el que se han adquirido las entradas ya sea web, taquilla o invitación.
- Cuestión: ¿Qué información quiere almacenar de las entradas?
- Respuesta: La fecha y hora de compra, el canal por el que se ha adquirido, representación, fila y butaca que le corresponde y el precio de compra al que se ha adquirido ya que puede variar con el paso del tiempo.
- Cuestión: ¿Algo más?
- Respuesta: Creo que en principio es todo. Como ya le comenté, queremos que tanto la planificación de espectáculos como la venta de entradas estén gestionados por la aplicación y se puedan consultar a través de Internet.
Modelo conceptual
Diagrama de clases

Modelo relacional
Intensión
TiposEspectaculos(tipoEspectaculoId, tipo)
PK(tipoEspectaculoId)
Zonas(zonaId, nombreZona)
PK(zonaId)
Precios(precioId, zonaId, tipoEspectaculoId, precio)
PK(precioId)
FK(zonaId) / Zonas
FK(tipoEspectaculoId) / TiposEspectaculos
Localidades(localidadId, zonaId, numFila, numButaca)
PK(localidadId)
FK(zonaId) / Zonas
AK(zonaId, numFila, numButaca)
Espectaculos(espectaculoId, tipoEspectaculoId, nombre, denominacion, duracion)
PK(espectaculoId)
FK(tipoEspectaculoId) / TiposEspectaculos
Representaciones(representacionId, espectaculoId, fechaHoraInicio)
PK(representacionId)
FK(espectaculoId) / Espectaculos
AK(espectaculoId, fechaHoraInicio)
Entradas(entradaId, representacionId, localidadId, fHoraCompra, canal, pCompra)
PK(entradaId)
FK(representacionId) / Representaciones
FK(localidadId) / Localidades
AK(representacionId, localidadId)
Extensión (fragmento)
TiposEspectaculos = { (te1, "Concierto") }
Zonas = { (z1, "Patio"), (z2, "Primera Balcón") }
Precios = { (p1, z1, te1, 50), (p2, z2, te1, 100) }
Localidades = { (l1, z1, 5, 12), (l2, z2, 1, 6) }
Espectaculos = { (e1, te1, "Concierto de ACDC", "Festival", 2.5) }
Representaciones = { (r1, e1, "2024-10-15 20:00"), (r2, e1, "2024-10-16 20:00") }
Entradas = { (en1, r1, l1, "2024-10-10 18:00", "Web", 50), (en2, r2, l2, "2024-10-11 15:00", "Invitación", 0) }
Álgebra relacional
- Precios por zona y tipo:
- Localidades por zona/tipo/representación:
- Entradas por representación:
- Representaciones con espectáculos:
- Número de representaciones por espectáculo:
- Recaudación por representación:
- Localidades vendidas en r3:
- Entradas por invitación:
Modelo Tecnológico (MariaDB)
Modelo tecnológico (MariaDB)
Para crear el esquema de la base de datos en MariaDB se puede usar el siguiente script:
Script SQL para crear la base de datos
Script SQL para la carga inicial de datos
Para cargar los datos de prueba se puede usar el siguiente script:
Consultas
Para crear las consultas SQL de las expresiones en Álgebra relacional se puede usar el siguiente script:
SQL Avanzado
Para comprobar que la fecha de compra de una entrada es anterior a la fecha de la representación tenemos que usar triggers. El siguiente script muestra cómo se implementa un procedimiento almacenado que hace la comprobación y después se crean dos triggers, uno que hace la comprobación al insertar y otro al actualizar: