elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Ejer Alg relacional
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] Ir Abajo Respuesta Imprimir
Autor Tema: Ejer Alg relacional  (Leído 2,989 veces)
rubcr

Desconectado Desconectado

Mensajes: 51


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #20 en: 18 Abril 2020, 17:04 pm »

  • El primer apartado está bien.
  • El segundo no permite esa intersección. Tanto la unión como la intersección son dos operaciones que tienen que hacerse sobre tablas con la misma estructura y tú estás mezclando CodParque (que no tiene sentido) con CodPeticion.
  • El tercero ya tiene menos sentido todavía porque en ningún momento necesitas meter la tabla Bomberos. Y además metes el resultado del apartado anterior que también es incorrecto.
  • Y el cuarto apartado como vuelves a reutilizar la solución del segundo apartado tampoco es correcto.

PD: El foro es para preguntar dudas concretas. No para tener aquí a un grupo de personas para corregirte todos los ejercicios. Para eso están tus profesores que para algo están cobrando... También debería ser suya la obligación de enseñar pero como todos sabemos ya, muchas veces no saben ni lo que dicen... Bueno que me caliento y esto da para un tema entero y tampoco es plan... :silbar:

PD 2: Deberías acostumbrarte a usar más Joins y no tantas intersecciones. Con esto ya te doy la pista de que estos ejercicios pueden hacerse sin usar intersecciones.
Te entiendo, pero si de por sí no explican, en la situación que estamos menos.
Nos ha dado un pdf y nos ha mandado esto sin explicarnos nada, y nos tenemos que buscar la vida empezando en algo nuevo.


En línea

K-YreX


Desconectado Desconectado

Mensajes: 897



Ver Perfil
Re: Ejer Alg relacional
« Respuesta #21 en: 18 Abril 2020, 17:25 pm »

Pues una recomendación es que busques en Internet cosas de álgebra relacional o consultas SQL directamente si quieres (es muy parecido y así te preparas para lo que viene después). Habrá un montón de sitios donde explican Joins y con ejemplos visuales que es como mejor se ve.
Y cuando tengas una duda concreta de uno de esos sitios en los que hayas buscado es cuando deberías abrir un tema para resolver ese tema en concreto. Al final el aprendizaje va a cuenta de cada uno y aunque te parezca que estás leyendo muchas páginas y que ninguna te sirve, llegará un momento en que todo te encaje y empieces a relacionar lo que acabas de entender con aquello que viste en tal sitio y que en su momento no entendiste.

PD: Al margen de lo que está pasando, seguro que tus profesores tienen un correo al que molestarles para que te corrijan los ejercicios. Porque encima los profesores que menos se esfuerzan son luego los más tiquismiquis y te dirán que tal método no sirve o que los hagas de tal forma.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
rubcr

Desconectado Desconectado

Mensajes: 51


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #22 en: 18 Abril 2020, 17:44 pm »

Pues una recomendación es que busques en Internet cosas de álgebra relacional o consultas SQL directamente si quieres (es muy parecido y así te preparas para lo que viene después). Habrá un montón de sitios donde explican Joins y con ejemplos visuales que es como mejor se ve.
Y cuando tengas una duda concreta de uno de esos sitios en los que hayas buscado es cuando deberías abrir un tema para resolver ese tema en concreto. Al final el aprendizaje va a cuenta de cada uno y aunque te parezca que estás leyendo muchas páginas y que ninguna te sirve, llegará un momento en que todo te encaje y empieces a relacionar lo que acabas de entender con aquello que viste en tal sitio y que en su momento no entendiste.

PD: Al margen de lo que está pasando, seguro que tus profesores tienen un correo al que molestarles para que te corrijan los ejercicios. Porque encima los profesores que menos se esfuerzan son luego los más tiquismiquis y te dirán que tal método no sirve o que los hagas de tal forma.
En el apartado b, la parte de: recibidas por el parque de bomberos Casa de campo tengo claro que se usa un sigma, pero me has puesto antes que hacer in pi cod_parque no tiene sentido,  como se juntaria con la parte del apartado a? Sería con un joint pero entonces la tabla recibe no le vería sentido.
En línea

K-YreX


Desconectado Desconectado

Mensajes: 897



Ver Perfil
Re: Ejer Alg relacional
« Respuesta #23 en: 18 Abril 2020, 18:48 pm »

En el apartado b, la parte de: recibidas por el parque de bomberos Casa de campo tengo claro que se usa un sigma, pero me has puesto antes que hacer in pi cod_parque no tiene sentido,  como se juntaria con la parte del apartado a? Sería con un joint pero entonces la tabla recibe no le vería sentido.

Citar
Código de todas las peticiones de servicio de gravedad 7 recibidas por el parque de bomberos “Casa de Campo”.
(Pi(CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (π (CodPeticion) Sigma (Grado = 7) (Peticiones)) ∗ Recibe)

Explicado con un ejemplo. Vamos a suponer que los CodParque se forman con "Cpa" + 4 dígitos y los CodPeticion se forman con "CPe" + 4 dígitos.
Imagina que haces la primera parte de la intersección. Así obtienes el CodParque de los parques que se llamen C.campo y que hayan recibido alguna petición. Y los CodParque obtenidos son (por ejemplo):
Código:
CPa0001
CPa0002
CPa0015

Y ahora vamos a hacer la segunda parte de tu intersección. Con ello obtienes los CodPeticion de las peticiones de gravedad 7 y que han sido recibidas por algún parque. Y esto nos da como resultado los siguientes CodPeticion (por ejemplo):
Código:
CPe0005
CPe0008
CPe0010
CPe0015

Y tu solución es la intersección de ambos (cosa que te adelanto que no se puede hacer porque estás trabajando con campos diferentes CodParque por un lado y CodPeticion por otro... Pero supongamos que se puede hacer la intersección) que es: NADA. 0. Mejor dicho {Vacio}. No hay ninguna coincidencia entre una tabla y otra.



Hay dos formas de hacer esto:
  • USANDO UNA INTERSECCIÓN:
Código:
(PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))
Empecemos por la premisa de que CodPeticion es un atributo/campo/columna identificativa/discriminante/clave (porque lleva #). Esto significa que cualquier petición se puede identificar con saber su CodPeticion o que no existen dos peticiones con el mismo CodPeticion.
La primera parte de la intersección obtiene los CodPeticion de todas las peticiones que haya recibido el parque C.campo. Por ejemplo, siguiendo con el ejemplo de antes:
Código:
CPe0005
CPe0006
CPe0015
Esos son los CodPeticion de todas las peticiones que han recibido los parques con nombre C.campo. Ahora de todos esos tenemos que ver los que tienen gravedad 7. Entonces con la segunda parte de la intersección obtenemos los CodPeticion de todas las peticiones con gravedad 7. Que son, por ejemplo:
Código:
CPe0004
CPe0005
CPe0015
Ahora si hacemos la intersección entre ambos resultados, obtenemos los CodPeticion de todas las peticiones de gravedad 7 que han recibido los parques C.campo.
Código:
CPe0005
CPe0015

Recalco que la JOIN entre Parque y Recibe se hace por medio de CodParque (campo que tienen ambas en común).

  • USANDO UNA JOIN:
En este método no me voy a explayar tanto. La primera parte es igual (JOIN entre Parque y Recibe) pero lo que hacemos es otra JOIN de esas dos con Peticion (por medio de CodPeticion).
Código:
PI(Peticion.CodPeticion)(SIGMA(gravedad = 7)(Parque JOIN Recibe JOIN Peticion)
En el campo del PI hay que especificar una tabla, bien Recibe o bien Peticion porque ambas tienen el campo CodPeticion pero el resultado es el mismo ya que el CodPeticion tiene que coincidir en ambas.
Así tal cual esta consulta es peor porque trabaja con mayor cantidad de datos ya que hemos dejado los SIGMAs y PIs para el final pero eso hace que la consulta quede más simple.


Ahora ya papel y boli (o lo que prefieras) y a leer todos los mensajes de este tema con todos los ejemplos que he ido poniendo hasta entenderlo. Creo que ya tienes ejemplos y explicaciones de sobra. :rolleyes: :rolleyes:
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
rubcr

Desconectado Desconectado

Mensajes: 51


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #24 en: 18 Abril 2020, 20:28 pm »

Explicado con un ejemplo. Vamos a suponer que los CodParque se forman con "Cpa" + 4 dígitos y los CodPeticion se forman con "CPe" + 4 dígitos.
Imagina que haces la primera parte de la intersección. Así obtienes el CodParque de los parques que se llamen C.campo y que hayan recibido alguna petición. Y los CodParque obtenidos son (por ejemplo):
Código:
CPa0001
CPa0002
CPa0015

Y ahora vamos a hacer la segunda parte de tu intersección. Con ello obtienes los CodPeticion de las peticiones de gravedad 7 y que han sido recibidas por algún parque. Y esto nos da como resultado los siguientes CodPeticion (por ejemplo):
Código:
CPe0005
CPe0008
CPe0010
CPe0015

Y tu solución es la intersección de ambos (cosa que te adelanto que no se puede hacer porque estás trabajando con campos diferentes CodParque por un lado y CodPeticion por otro... Pero supongamos que se puede hacer la intersección) que es: NADA. 0. Mejor dicho {Vacio}. No hay ninguna coincidencia entre una tabla y otra.



Hay dos formas de hacer esto:
  • USANDO UNA INTERSECCIÓN:
Código:
(PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))
Empecemos por la premisa de que CodPeticion es un atributo/campo/columna identificativa/discriminante/clave (porque lleva #). Esto significa que cualquier petición se puede identificar con saber su CodPeticion o que no existen dos peticiones con el mismo CodPeticion.
La primera parte de la intersección obtiene los CodPeticion de todas las peticiones que haya recibido el parque C.campo. Por ejemplo, siguiendo con el ejemplo de antes:
Código:
CPe0005
CPe0006
CPe0015
Esos son los CodPeticion de todas las peticiones que han recibido los parques con nombre C.campo. Ahora de todos esos tenemos que ver los que tienen gravedad 7. Entonces con la segunda parte de la intersección obtenemos los CodPeticion de todas las peticiones con gravedad 7. Que son, por ejemplo:
Código:
CPe0004
CPe0005
CPe0015
Ahora si hacemos la intersección entre ambos resultados, obtenemos los CodPeticion de todas las peticiones de gravedad 7 que han recibido los parques C.campo.
Código:
CPe0005
CPe0015

Recalco que la JOIN entre Parque y Recibe se hace por medio de CodParque (campo que tienen ambas en común).

  • USANDO UNA JOIN:
En este método no me voy a explayar tanto. La primera parte es igual (JOIN entre Parque y Recibe) pero lo que hacemos es otra JOIN de esas dos con Peticion (por medio de CodPeticion).
Código:
PI(Peticion.CodPeticion)(SIGMA(gravedad = 7)(Parque JOIN Recibe JOIN Peticion)
En el campo del PI hay que especificar una tabla, bien Recibe o bien Peticion porque ambas tienen el campo CodPeticion pero el resultado es el mismo ya que el CodPeticion tiene que coincidir en ambas.
Así tal cual esta consulta es peor porque trabaja con mayor cantidad de datos ya que hemos dejado los SIGMAs y PIs para el final pero eso hace que la consulta quede más simple.


Ahora ya papel y boli (o lo que prefieras) y a leer todos los mensajes de este tema con todos los ejemplos que he ido poniendo hasta entenderlo. Creo que ya tienes ejemplos y explicaciones de sobra. :rolleyes: :rolleyes:
En la fórmula:
(PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))

(PI(CodPeticion) de la parte de la izquierda de la intersección, sería de la tabla recibe?
En línea

K-YreX


Desconectado Desconectado

Mensajes: 897



Ver Perfil
Re: Ejer Alg relacional
« Respuesta #25 en: 18 Abril 2020, 20:37 pm »

En la fórmula:
(PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))
(PI(CodPeticion) de la parte de la izquierda de la intersección, sería de la tabla recibe?
Obviamente. La tabla Parque no tiene ninguna columna CodPeticion.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
rubcr

Desconectado Desconectado

Mensajes: 51


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #26 en: 18 Abril 2020, 21:19 pm »

Obviamente. La tabla Parque no tiene ninguna columna CodPeticion.
En el apartado C me ha surgido una duda, como junto los códigos de los equipos con el resto de la operación?
Supongo que un joint porque con una intersección no me cuadra.
Y al obtener esos código a parte del sigma también se usaría pi cod pet servicio como el anterior apartado?
En línea

K-YreX


Desconectado Desconectado

Mensajes: 897



Ver Perfil
Re: Ejer Alg relacional
« Respuesta #27 en: 18 Abril 2020, 22:32 pm »

Dadas las siguientes tablas.
BOMBERO(#Cod_Bom, Nombre, Apellidos, Fecha_Nac, DNI, Dirección, Teléfono, Cod_Parque, Cod_Eq, Puesto)
PARQUE BOMBEROS(#Cod_Parque, Nombre, Dirección, Teléfono, Categoría)
EQUIPO(#Cod_Eq, Nombre)
PETICION_SERVICIO(#Cod_Pet_Serv, Tipo_Serv, Grado_Urgencia, Cod_Eq)
RECIBE(#Cod_Parque, #Cod_Pet_Serv, Fecha, Hora)
Se pide:

a) Código de todas las peticiones de servicio de gravedad 7.
b) Código de todas las peticiones de servicio de gravedad 7 recibidas por el parque de bomberos “Casa de Campo”.
c) Códigos de todos los equipos que respondieron a cualquier petición de servicio de gravedad 7 recibidas por el parque de bomberos “Casa de   Campo”.
d)Nombre de los bomberos que pertenecen a cualquier equipo que respondiera a cualquier petición de servicio de gravedad 7 recibida por el parque de      bomberos “Casa de Campo”.

Si necesitas CodEq, tendrás que mirar en todas las tablas para ver dónde tienes ese dato y luego ver de todas las tablas que lo tengan, cuál es el que necesitas usar.
Para ahorrarme un mensaje: En este caso tienes un CodEq en la tabla Peticion y esa tabla ya la usabas en la consulta del apartado b, por lo que solo tienes que cambiar el campo seleccionado con PI() de CodPeticion a CodEq...



Para qué quieres usar PI(CodPetServ)?? Estás buscando el código de la petición?? Yo creo que no.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
rubcr

Desconectado Desconectado

Mensajes: 51


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #28 en: 18 Abril 2020, 22:43 pm »

Si necesitas CodEq, tendrás que mirar en todas las tablas para ver dónde tienes ese dato y luego ver de todas las tablas que lo tengan, cuál es el que necesitas usar.
Para ahorrarme un mensaje: En este caso tienes un CodEq en la tabla Peticion y esa tabla ya la usabas en la consulta del apartado b, por lo que solo tienes que cambiar el campo seleccionado con PI() de CodPeticion a CodEq...



Para qué quieres usar PI(CodPetServ)?? Estás buscando el código de la petición?? Yo creo que no.
Para el apartado d simplemente se haria pi Nombre de la tabla bomberos y natural join con lo demás (apartado c)? Y si es así se pondría en la parte derecha de la intersección?
« Última modificación: 19 Abril 2020, 19:09 pm por rubcr » En línea

Páginas: 1 2 [3] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Dudas ejer 2 y 3 VB...
Ejercicios
limalimon1 1 2,691 Último mensaje 15 Agosto 2004, 12:50 pm
por soplo
ayuda con mi modelo relacional
Bases de Datos
lokito1986 0 3,556 Último mensaje 3 Septiembre 2010, 02:36 am
por lokito1986
Duda con modelo relacional
Bases de Datos
Psyke1 4 2,604 Último mensaje 23 Agosto 2012, 12:49 pm
por Psyke1
Consultas en Álgebra Relacional
Bases de Datos
Emerson07 0 913 Último mensaje 8 Noviembre 2015, 23:01 pm
por Emerson07
Algebra relacional
Bases de Datos
piete2 0 477 Último mensaje 6 Mayo 2018, 20:12 pm
por piete2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines