Modelo Conceptual

Diagrama de Clases

Modelo Relacional. Intensión

Personas(personaId, nombre, apellido, fechaNacimiento, nacionalidad)
    PK(personaId)

Tenistas(personaId, ranking)
    PK(personaId)
    FK(personaId)/Personas

Árbitros(personaId, licencia)
    PK(personaId)
    AK(licencia) -- no lo indica el modelo, parece lógico
    FK(personaId)/Personas

Partidos(partidoId, tenista1Id, tenista2Id, ganadorId, árbitroId, torneo, fecha, ronda, duración)
    PK(partidoId)
    FK(tenista1Id)/Tenistas
    FK(tenista2Id)/Tenistas
    FK(ganadorId)/Tenistas
    FK(árbitroId)/Árbitros

    ** ganadorId \in = {tenista1Id, tenista2Id}

Sets(setId, partidoId, ganadorId, orden, resultado)
    PK(setId)
    FK(partidoId)/Partidos
    FK(ganadorId)/Tenistas

Modelo Relacional. Extensión

Personas = {
    (p1, 'Rafael', 'Nadal', 1986-06-03, 'España'),
    (p2, 'Novak', 'Djokovic', 1987-05-22, 'Serbia'),
    (p3, 'John', 'Hawkins', 1975-03-15, 'Reino Unido'),
    (p4, 'Roger', 'Federer', 1981-08-08, 'Suiza'),
    (p5, 'Carlos', 'Ramos', 1971-11-13, 'Portugal'),
    (p6, 'Serena', 'Williams', 1981-09-26, 'Estados Unidos'),
    (p7, 'Carlos', 'Alcaraz', 2003-05-05, 'España'),
    (p8, 'Maria', 'González', 1970-08-20, 'Argentina'),
    (p9, 'Andy', 'Murray', 1987-05-15, 'Reino Unido'),
    (p10, 'Elena', 'Rybakina', 1999-06-17, 'Kazajistán'),
    (p11, 'James', 'Mitchell', 1965-12-10, 'Australia'),
    (p12, 'Daniil', 'Medvedev', 1996-02-11, 'Rusia')
}

Tenistas = {
    (p1, 2),
    (p2, 1),
    (p4, 3),
    (p6, 1),
    (p7, 4),
    (p9, 5),
    (p10, 2),
    (p12, 6)
}

Árbitros = {
    (p3, 'ATP-001'),
    (p5, 'ATP-002'),
    (p8, 'WTA-003'),
    (p11, 'ATP-004')
}

Partidos = {
    (par1, p1, p2, p2, p3, 'Roland Garros 2025', 2025-07-11, 'Final', 195),
    (par2, p1, p4, p1, p5, 'Wimbledon 2025', 2025-07-08, 'Semifinal', 168),
    (par3, p6, p10, p6, p8, 'US Open 2025', 2025-09-12, 'Final', 142),
    (par4, p7, p9, p7, p11, 'Australian Open 2025', 2025-01-28, 'Cuartos', 203),
    (par5, p2, p12, p2, p3, 'Roland Garros 2025', 2025-07-09, 'Semifinal', 256),
    (par6, p4, p7, p4, p5, 'Wimbledon 2025', 2025-07-07, 'Cuartos', 178),
    (par7, p1, p7, p1, p11, 'US Open 2025', 2025-09-10, 'Semifinal', 189),
    (par8, p9, p12, p12, p8, 'Australian Open 2025', 2025-01-26, 'Octavos', 234)
}

Sets = {
    (s1, par1, p2, 1, '6-4'),
    (s2, par1, p1, 2, '7-5'),
    (s3, par1, p2, 3, '6-3'),
    (s4, par2, p1, 1, '6-2'),
    (s5, par2, p1, 2, '7-6'),
    (s6, par3, p6, 1, '6-1'),
    (s7, par3, p10, 2, '4-6'),
    (s8, par3, p6, 3, '6-4'),
    (s9, par4, p7, 1, '7-5'),
    (s10, par4, p9, 2, '3-6'),
    (s11, par4, p7, 3, '6-2'),
    (s12, par4, p7, 4, '6-4'),
    (s13, par5, p2, 1, '6-0'),
    (s14, par5, p12, 2, '6-7'),
    (s15, par5, p2, 3, '6-3'),
    (s16, par6, p4, 1, '6-3'),
    (s17, par6, p4, 2, '6-2'),
    (s18, par7, p1, 1, '7-6'),
    (s19, par7, p7, 2, '4-6'),
    (s20, par7, p1, 3, '6-1'),
    (s21, par8, p12, 1, '6-4'),
    (s22, par8, p9, 2, '7-5'),
    (s23, par8, p12, 3, '6-2')
}

Álgebra relacional

Enunciados

1. Obtener el nombre, apellido y ranking de todos los tenistas de nacionalidad española

2. Mostrar todos los partidos que fueron finales en Roland Garros 2025

3. Obtener nombre, apellido y licencia de todos los árbitros con licencia ATP

4. Nombres de tenistas que ganaron al menos un partido en Wimbledon 2025

5. Información de sets con resultado 6-0 (juego perfecto)

6. Obtener torneo, ronda y duración de partidos que duraron más de 200 minutos

7. Nombre y ranking de tenistas con ranking mejor que 3 (ranking ≤ 3)

8. Información de partidos arbitrados por árbitros de nacionalidad Reino Unido

9. Obtener el número de sets ganados por cada tenista

10. Partidos donde ambos tenistas tienen ranking ≤ 3

Soluciones

Renombramiento de relaciones:

\[P \leftarrow \Ren{P(pId,nom,ape,fec,nac)}(Personas)\] \[T \leftarrow \Ren{T(pId,ran)}(Tenistas)\] \[A \leftarrow \Ren{A(pId,lic)}(Árbitros)\] \[Par \leftarrow \Ren{Par(parId,ten1Id,ten2Id,ganId,arbId,tor,fec,ron,dur)}(Partidos)\] \[S \leftarrow \Ren{S(setId,parId,ganId,ord,res)}(Sets)\]

1. Obtener el nombre, apellido y ranking de todos los tenistas de nacionalidad española

\[\Proj{nom, ape, ran}\left(\Sel{nac = \text{'España'}}(P \Join T)\right)\]
Resultado: {
    ('Rafael', 'Nadal', 2),
    ('Carlos', 'Alcaraz', 4)
}

2. Mostrar todos los partidos que fueron finales en Roland Garros 2025

\[\Sel{tor = '\text{Roland Garros 2025}' \land ron = '\text{Final}'}(Par)\]
Resultado: {
    (par1, p1, p2, p2, p3, 'Roland Garros 2025', 2025-07-11, 'Final', 195)
}

3. Obtener nombre, apellido y licencia de todos los árbitros con licencia ATP

\[\Proj{nom, ape, lic}\left(\Sel{lic\\ LIKE\\ 'ATP\%'}(P \Join A)\right)\]
Resultado: {
    ('John', 'Hawkins', 'ATP-001'),
    ('Carlos', 'Ramos', 'ATP-002'),
    ('James', 'Mitchell', 'ATP-004')
}

4. Nombres de tenistas que ganaron al menos un partido en Wimbledon 2025

\[GanadoresWim \leftarrow \Proj{ganId}(\Sel{tor = 'Wimbledon\ 2025'}(Par))\] \[\Proj{nom, ape}(GanadoresWim \Join_{ganId = pId} P)\]
Resultado: {
    ('Rafael', 'Nadal'),
    ('Roger', 'Federer')
}

5. Información de sets con resultado 6-0 (juego perfecto)

\[\Sel{res = '6-0'}(S)\]
Resultado: {
    (s13, par5, p2, 1, '6-0')
}

6. Obtener torneo, ronda y duración de partidos que duraron más de 200 minutos

\[\Proj{tor, ron, dur}(\Sel{dur > 200}(Par))\]
Resultado: {
    ('Australian Open 2025', 'Cuartos', 203),
    ('Roland Garros 2025', 'Semifinal', 256),
    ('Australian Open 2025', 'Octavos', 234)
}

7. Nombre y ranking de tenistas con ranking mejor que 3 (ranking ≤ 3)

\[\Proj{nom, ape, ran}(\Sel{ran \leq 3}(P \Join T))\]
Resultado: {
    ('Rafael', 'Nadal', 2),
    ('Novak', 'Djokovic', 1),
    ('Roger', 'Federer', 3),
    ('Serena', 'Williams', 1),
    ('Elena', 'Rybakina', 2)
}

8. Información de partidos arbitrados por árbitros de nacionalidad Reino Unido

\[ArbitrosRU \leftarrow \Proj{pId}(\Sel{nac = 'Reino\ Unido'}(P \Join A))\] \[PartidosArbitradosRU \leftarrow ArbitrosRU \Join_{pId = arbId} Par\] \[\Proj{parId, tor, fec, ron}(PartidosArbitradosRU)\]
Resultado: {
    (par1, 'Roland Garros 2025', 2025-07-11, 'Final'),
    (par4, 'Australian Open 2025', 2025-01-28, 'Cuartos'),
    (par7, 'US Open 2025', 2025-09-10, 'Semifinal')
}

9. Obtener el número de sets ganados por cada tenista

\[SetsContados \leftarrow \Group{ganId, \Ren{numSets}COUNT(*)}{ganId}(S)\] \[\Proj{nom, ape, numSets}(SetsContados \Join_{ganId = pId} P)\]
Resultado: {
    ('Rafael', 'Nadal', 6),
    ('Novak', 'Djokovic', 4),
    ('Roger', 'Federer', 2),
    ('Serena', 'Williams', 3),
    ('Carlos', 'Alcaraz', 5),
    ('Andy', 'Murray', 1),
    ('Daniil', 'Medvedev', 2)
}

10. Partidos donde ambos tenistas tienen ranking ≤ 3

\[TenistasTop3 \leftarrow \Proj{pId}(\Sel{ran \leq 3}(T))\] \[PartidosTop3 \leftarrow \Sel{ten1Id \in TenistasTop3 \land ten2Id \in TenistasTop3}(Par)\] \[\Proj{parId, tor, ron}(PartidosTop3)\]
Resultado: {
    (par1, 'Roland Garros 2025', 'Final'),
    (par2, 'Wimbledon 2025', 'Semifinal')
}

Versión PDF disponible