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

 

 


Tema destacado:


+  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,039 veces)
rubcr

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #10 en: 16 Abril 2020, 00:07 am »

Y si no entiendes una consulta hecha por partes, comentada y con ejemplos... Vas a entender mejor una consulta completa que ocupa dos líneas sin más?
Los ejemplos no los entiendes. Muy bien. Pues qué no entiendes de los ejemplos? Lo que es un producto cartesiano? Por qué utilizo la tabla Pedidos? Por qué igualo los códigos de una tabla con los de la otra?
Si eres más específico con tu duda, podré hacer otro intento en explicártelo. Por si no lo has notado estoy prefiriendo gastar más tiempo en hacerte una explicación completa que en darte la respuesta y que no la entiendas.

Y por estúpida que te parezca la pregunta que quieras hacer te dejo una frase para que te sirva de motivación: "Quien hace una pregunta es ignorante cinco minutos; quien no la hace será siempre ignorante."
Para empezar, no entiendo por qué usas valores de una tabla que no se pide en el enunciado, no entiendo por qué igualas valores, no entiendo por qué usas productos cartesianos en vez de natural join


En línea

K-YreX


Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ejer Alg relacional
« Respuesta #11 en: 16 Abril 2020, 00:42 am »

Para empezar, no entiendo por qué usas valores de una tabla que no se pide en el enunciado, no entiendo por qué igualas valores, no entiendo por qué usas productos cartesianos en vez de natural join
Qué valores uso de tablas que no se piden en el enunciado? Hay 3 tablas Proveedores, Artículos y Pedidos que son las que estoy usando todo el tiempo, los campos que uso son los que están definidos en el enunciado (quitando los que no son importantes obviamente por escribir menos) y las tablas que te estoy mostrando son ejemplos de filas que tengas guardadas en tus tablas (excepto tabla1 y tabla2 que las he puesto para mostrarte lo que era un producto cartesiano).
Una natural join en líneas generales no es otra cosa que un producto cartesiano con dos campos igualados. Las dos consultas siguientes son idénticas. (En algunos casos puedes encontrar especificado en la JOIN cuáles son los campos que se igualan pero si son obvios, se pueden no poner).
Código:
Sigma(Pedidos.Cod_art = Articulos.Cod_art)(Pedidos x Articulos)
(Pedidos JOIN Articulos)

Volvemos a hacer lo mismo pero usando JOINS:
Para empezar, mirando tu solución:
Citar
πNombre(Proveedores *(σCOLOR=’ROJO’(Artículos)) ∩ πNombre(Proveedores *(σCOLOR=’VERDE’(Artículos))
No puedes hacer una JOIN entre Proveedores y Artículos porque no tienes un campo/columna que igualar. La tabla que relaciona a los proveedores con los artículos es la tabla Pedidos. Cada pedido está formado por el código del proveedor, el código del artículo que suministra y la cantidad de éste.

Objetivo: Nombre de los proveedores que suministran artículos de color rojo y verde.
Preguntas que te tienes que hacer:
  • De qué tabla saco los nombres de los proveedores? -> De la tabla Proveedores.
  • Cómo sé qué artículos suministra un proveedor o qué proveedores suministran un artículo? -> Con la tabla Pedidos.
  • Cómo sé de qué color es un artículo? -> Con la tabla Artículo.

Ahora el nombre de los proveedores que suministran artículos de color rojo y verde lo podemos obtener como la intersección de los nombres de los proveedores que suministran artículos rojos con los nombres de los que suministran artículos verdes. Vamos haciendo el ejercicio por partes:
RFinal (resultado final) = RRojo (resultado rojo) INTERSECCION RVerde (resultado verde)

Ahora vamos a calcular primero RRojo que son los nombres de los proveedores que suministran artículos rojos:
Empezamos cogiendo de la tabla Artículos los que son de color rojo:
Código:
R1 = Sigma(color = 'Rojo')(Artículo)
(Con esta no creo que tengas problemas porque es lo que has hecho tú) (Y R1 es por llamarlo de alguna manera. R1 es una tabla que contiene los artículos de color rojo. Se puede llamar como quieras, es como una variable en matemáticas de toda la vida)

Ahora queremos saber qué proveedores han suministrado esos artículos (los rojos). Para saberlo tenemos que utilizar la tabla Pedidos. Como ambas tablas (Pedidos y Artículos) tienen un campo en común (Cod_art) podemos hacer una natural join para obtener los códigos de los proveedores que han suministrado cada uno de los artículos que tenemos:
Código:
R2 = Pedidos JOIN R1
R2 es una tabla que se forma al juntar los artículos rojos (que teníamos en R1) con todos los Pedidos. Ahora tenemos filas con los códigos de los proveedores que han suministrado esos artículos. Como queremos los nombres y esos están en Proveedores, tenemos que hacer otra JOIN. En este caso R2 tiene un campo que es Cod_Prov (que viene de Pedidos) y Proveedores también lo tiene, por lo que se puede hacer la JOIN sin problemas.
Código:
R3 = Proveedores JOIN R2
Ahora R3 es una tabla cuyas filas tienen toda la información de los artículos rojos. Los pedidos a los que pertenecen (cosa que ya no nos vale para nada porque era una operación intermedia) y los proveedores que han realizado dicho pedidos (que es lo que nos interesa). Ahora nos quedamos con el nombre:
Código:
RRojo = PI(Nombre)(R3)
RRojo es la tabla que contiene el nombre de todos los proveedores que han suministrado artículos rojos.

Ahora tienes que hacer lo mismo con los artículos verdes para obtener RVerde con los nombres de los proveedores que han suministrado artículos verdes.
Y cuando lo tengas vas deshaciendo las "variables" (R1, R2,...) para que te quede la consulta completa. Te lo voy a deshacer para RRojo:
Código:
RRojo = PI(Nombre)(R3)
RRojo = PI(Nombre)(Proveedores JOIN R2)
RRojo = PI(Nombre)(Proveedores JOIN Pedidos JOIN Sigma(color = 'Rojo')(Artículo))
Y ya estaría la mitad hecha. Esa consulta te da los nombres de los proveedores que suministran artículos rojos.

PD: En este caso no te he puesto ejemplos por si era eso lo que te liaba. Pero desde mi punto de vista con los ejemplos es con lo que mejor se ve lo que estás haciendo con cada operación.


En línea

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

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #12 en: 16 Abril 2020, 00:55 am »

Qué valores uso de tablas que no se piden en el enunciado? Hay 3 tablas Proveedores, Artículos y Pedidos que son las que estoy usando todo el tiempo, los campos que uso son los que están definidos en el enunciado (quitando los que no son importantes obviamente por escribir menos) y las tablas que te estoy mostrando son ejemplos de filas que tengas guardadas en tus tablas (excepto tabla1 y tabla2 que las he puesto para mostrarte lo que era un producto cartesiano).
Una natural join en líneas generales no es otra cosa que un producto cartesiano con dos campos igualados. Las dos consultas siguientes son idénticas. (En algunos casos puedes encontrar especificado en la JOIN cuáles son los campos que se igualan pero si son obvios, se pueden no poner).
Código:
Sigma(Pedidos.Cod_art = Articulos.Cod_art)(Pedidos x Articulos)
(Pedidos JOIN Articulos)

Volvemos a hacer lo mismo pero usando JOINS:
Para empezar, mirando tu solución:No puedes hacer una JOIN entre Proveedores y Artículos porque no tienes un campo/columna que igualar. La tabla que relaciona a los proveedores con los artículos es la tabla Pedidos. Cada pedido está formado por el código del proveedor, el código del artículo que suministra y la cantidad de éste.

Objetivo: Nombre de los proveedores que suministran artículos de color rojo y verde.
Preguntas que te tienes que hacer:
  • De qué tabla saco los nombres de los proveedores? -> De la tabla Proveedores.
  • Cómo sé qué artículos suministra un proveedor o qué proveedores suministran un artículo? -> Con la tabla Pedidos.
  • Cómo sé de qué color es un artículo? -> Con la tabla Artículo.

Ahora el nombre de los proveedores que suministran artículos de color rojo y verde lo podemos obtener como la intersección de los nombres de los proveedores que suministran artículos rojos con los nombres de los que suministran artículos verdes. Vamos haciendo el ejercicio por partes:
RFinal (resultado final) = RRojo (resultado rojo) INTERSECCION RVerde (resultado verde)

Ahora vamos a calcular primero RRojo que son los nombres de los proveedores que suministran artículos rojos:
Empezamos cogiendo de la tabla Artículos los que son de color rojo:
Código:
R1 = Sigma(color = 'Rojo')(Artículo)
(Con esta no creo que tengas problemas porque es lo que has hecho tú) (Y R1 es por llamarlo de alguna manera. R1 es una tabla que contiene los artículos de color rojo. Se puede llamar como quieras, es como una variable en matemáticas de toda la vida)

Ahora queremos saber qué proveedores han suministrado esos artículos (los rojos). Para saberlo tenemos que utilizar la tabla Pedidos. Como ambas tablas (Pedidos y Artículos) tienen un campo en común (Cod_art) podemos hacer una natural join para obtener los códigos de los proveedores que han suministrado cada uno de los artículos que tenemos:
Código:
R2 = Pedidos JOIN R1
R2 es una tabla que se forma al juntar los artículos rojos (que teníamos en R1) con todos los Pedidos. Ahora tenemos filas con los códigos de los proveedores que han suministrado esos artículos. Como queremos los nombres y esos están en Proveedores, tenemos que hacer otra JOIN. En este caso R2 tiene un campo que es Cod_Prov (que viene de Pedidos) y Proveedores también lo tiene, por lo que se puede hacer la JOIN sin problemas.
Código:
R3 = Proveedores JOIN R2
Ahora R3 es una tabla cuyas filas tienen toda la información de los artículos rojos. Los pedidos a los que pertenecen (cosa que ya no nos vale para nada porque era una operación intermedia) y los proveedores que han realizado dicho pedidos (que es lo que nos interesa). Ahora nos quedamos con el nombre:
Código:
RRojo = PI(Nombre)(R3)
RRojo es la tabla que contiene el nombre de todos los proveedores que han suministrado artículos rojos.

Ahora tienes que hacer lo mismo con los artículos verdes para obtener RVerde con los nombres de los proveedores que han suministrado artículos verdes.
Y cuando lo tengas vas deshaciendo las "variables" (R1, R2,...) para que te quede la consulta completa. Te lo voy a deshacer para RRojo:
Código:
RRojo = PI(Nombre)(R3)
RRojo = PI(Nombre)(Proveedores JOIN R2)
RRojo = PI(Nombre)(Proveedores JOIN Pedidos JOIN Sigma(color = 'Rojo')(Artículo))
Y ya estaría la mitad hecha. Esa consulta te da los nombres de los proveedores que suministran artículos rojos.

PD: En este caso no te he puesto ejemplos por si era eso lo que te liaba. Pero desde mi punto de vista con los ejemplos es con lo que mejor se ve lo que estás haciendo con cada operación.
Muchísimas gracias por gastar tu tiempo en explicarmelo de verdad, estoy empezando en este tipo de cosas y  no sabes lo que me cuesta en comprenderlo.
Ya me ha quedado claro. Te vuelvo a dar las gracias por todo. Un saludo
En línea

rubcr

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #13 en: 16 Abril 2020, 01:38 am »

Qué valores uso de tablas que no se piden en el enunciado? Hay 3 tablas Proveedores, Artículos y Pedidos que son las que estoy usando todo el tiempo, los campos que uso son los que están definidos en el enunciado (quitando los que no son importantes obviamente por escribir menos) y las tablas que te estoy mostrando son ejemplos de filas que tengas guardadas en tus tablas (excepto tabla1 y tabla2 que las he puesto para mostrarte lo que era un producto cartesiano).
Una natural join en líneas generales no es otra cosa que un producto cartesiano con dos campos igualados. Las dos consultas siguientes son idénticas. (En algunos casos puedes encontrar especificado en la JOIN cuáles son los campos que se igualan pero si son obvios, se pueden no poner).
Código:
Sigma(Pedidos.Cod_art = Articulos.Cod_art)(Pedidos x Articulos)
(Pedidos JOIN Articulos)

Volvemos a hacer lo mismo pero usando JOINS:
Para empezar, mirando tu solución:No puedes hacer una JOIN entre Proveedores y Artículos porque no tienes un campo/columna que igualar. La tabla que relaciona a los proveedores con los artículos es la tabla Pedidos. Cada pedido está formado por el código del proveedor, el código del artículo que suministra y la cantidad de éste.

Objetivo: Nombre de los proveedores que suministran artículos de color rojo y verde.
Preguntas que te tienes que hacer:
  • De qué tabla saco los nombres de los proveedores? -> De la tabla Proveedores.
  • Cómo sé qué artículos suministra un proveedor o qué proveedores suministran un artículo? -> Con la tabla Pedidos.
  • Cómo sé de qué color es un artículo? -> Con la tabla Artículo.

Ahora el nombre de los proveedores que suministran artículos de color rojo y verde lo podemos obtener como la intersección de los nombres de los proveedores que suministran artículos rojos con los nombres de los que suministran artículos verdes. Vamos haciendo el ejercicio por partes:
RFinal (resultado final) = RRojo (resultado rojo) INTERSECCION RVerde (resultado verde)

Ahora vamos a calcular primero RRojo que son los nombres de los proveedores que suministran artículos rojos:
Empezamos cogiendo de la tabla Artículos los que son de color rojo:
Código:
R1 = Sigma(color = 'Rojo')(Artículo)
(Con esta no creo que tengas problemas porque es lo que has hecho tú) (Y R1 es por llamarlo de alguna manera. R1 es una tabla que contiene los artículos de color rojo. Se puede llamar como quieras, es como una variable en matemáticas de toda la vida)

Ahora queremos saber qué proveedores han suministrado esos artículos (los rojos). Para saberlo tenemos que utilizar la tabla Pedidos. Como ambas tablas (Pedidos y Artículos) tienen un campo en común (Cod_art) podemos hacer una natural join para obtener los códigos de los proveedores que han suministrado cada uno de los artículos que tenemos:
Código:
R2 = Pedidos JOIN R1
R2 es una tabla que se forma al juntar los artículos rojos (que teníamos en R1) con todos los Pedidos. Ahora tenemos filas con los códigos de los proveedores que han suministrado esos artículos. Como queremos los nombres y esos están en Proveedores, tenemos que hacer otra JOIN. En este caso R2 tiene un campo que es Cod_Prov (que viene de Pedidos) y Proveedores también lo tiene, por lo que se puede hacer la JOIN sin problemas.
Código:
R3 = Proveedores JOIN R2
Ahora R3 es una tabla cuyas filas tienen toda la información de los artículos rojos. Los pedidos a los que pertenecen (cosa que ya no nos vale para nada porque era una operación intermedia) y los proveedores que han realizado dicho pedidos (que es lo que nos interesa). Ahora nos quedamos con el nombre:
Código:
RRojo = PI(Nombre)(R3)
RRojo es la tabla que contiene el nombre de todos los proveedores que han suministrado artículos rojos.

Ahora tienes que hacer lo mismo con los artículos verdes para obtener RVerde con los nombres de los proveedores que han suministrado artículos verdes.
Y cuando lo tengas vas deshaciendo las "variables" (R1, R2,...) para que te quede la consulta completa. Te lo voy a deshacer para RRojo:
Código:
RRojo = PI(Nombre)(R3)
RRojo = PI(Nombre)(Proveedores JOIN R2)
RRojo = PI(Nombre)(Proveedores JOIN Pedidos JOIN Sigma(color = 'Rojo')(Artículo))
Y ya estaría la mitad hecha. Esa consulta te da los nombres de los proveedores que suministran artículos rojos.

PD: En este caso no te he puesto ejemplos por si era eso lo que te liaba. Pero desde mi punto de vista con los ejemplos es con lo que mejor se ve lo que estás haciendo con cada operación.
Perdona que te moleste otra vez.
En la parte de join pedidos, no sería necesaria escribir pi cod_articulo porque se entiende que se utiliza?
En línea

K-YreX


Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ejer Alg relacional
« Respuesta #14 en: 16 Abril 2020, 02:59 am »

Perdona que te moleste otra vez.
En la parte de join pedidos, no sería necesaria escribir pi cod_articulo porque se entiende que se utiliza?
Puedes especificarlo, sí, para así no trabajar con todas las columnas. Las columnas necesarias de cada tabla son:
  • Artículos: Cod_art (porque es la que permite relacionar esa tabla con Pedidos) y Color (porque es el filtro que vamos a usar: rojo y verde)
  • Pedidos: Cod_art (porque es la que permite relacionar esta tabla con Artículos) y Cod_prov (porque es la que permite relacionar esta tabla con Proveedores)
  • Proveedores: Cod_prov (porque es la que permite relacionar esta tabla con Pedidos) y Nombre (porque es el objetivo)

El resto de columnas del enunciado son innecesarias. Puedes ir haciendo una proyección (PI()) de las columnas que necesitas para no trabajar con todas. Eso demuestra que sabes optimizar las consultas eliminando lo que no necesitas pero también hará que te queden las soluciones un poco más largas. Es por eso que he preferido dejar todas las columnas hasta el final y al final hacer la proyección del nombre solo (PI(nombre)).

Pero respecto a tu consulta, necesario no es ya que al no decir nada nos estamos quedando con todas las columnas.

Y en caso de que te refieras a que si es necesario especificar que la join entre Pedidos y Artículos se va a hacer por medio de la columna cod_art, no es necesario ya que es la única columna que tienen en común y además son claves (llevan #) por lo que se sobrentiende que la join se va a hacer por medio de esa columna.
Pero en este caso no se usaría PI() para indicar eso.
En línea

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

Desconectado Desconectado

Mensajes: 49


Ver Perfil
Re: Ejer Alg relacional
« Respuesta #15 en: 16 Abril 2020, 17:37 pm »

Puedes especificarlo, sí, para así no trabajar con todas las columnas. Las columnas necesarias de cada tabla son:
  • Artículos: Cod_art (porque es la que permite relacionar esa tabla con Pedidos) y Color (porque es el filtro que vamos a usar: rojo y verde)
  • Pedidos: Cod_art (porque es la que permite relacionar esta tabla con Artículos) y Cod_prov (porque es la que permite relacionar esta tabla con Proveedores)
  • Proveedores: Cod_prov (porque es la que permite relacionar esta tabla con Pedidos) y Nombre (porque es el objetivo)

El resto de columnas del enunciado son innecesarias. Puedes ir haciendo una proyección (PI()) de las columnas que necesitas para no trabajar con todas. Eso demuestra que sabes optimizar las consultas eliminando lo que no necesitas pero también hará que te queden las soluciones un poco más largas. Es por eso que he preferido dejar todas las columnas hasta el final y al final hacer la proyección del nombre solo (PI(nombre)).

Pero respecto a tu consulta, necesario no es ya que al no decir nada nos estamos quedando con todas las columnas.

Y en caso de que te refieras a que si es necesario especificar que la join entre Pedidos y Artículos se va a hacer por medio de la columna cod_art, no es necesario ya que es la única columna que tienen en común y además son claves (llevan #) por lo que se sobrentiende que la join se va a hacer por medio de esa columna.
Pero en este caso no se usaría PI() para indicar eso.
Hola buenas, me ha surgido una pequeña cuestión, por qué se utiliza una intersección en vez de una unión?.
En línea

K-YreX


Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ejer Alg relacional
« Respuesta #16 en: 16 Abril 2020, 20:10 pm »

La unión es como el "o" de toda la vida. Si usases una unión obtendrías: los proveedores que suministran artículos rojos o verdes.
La intersección es como la "y" de toda la vida. Si usas la intersección obtienes: los proveedores que suministran artículos rojos y verdes.

Código:
Tabla 1:
- Pepe
- Juan

Tabla 2:
- Pepe
- Luis

(Tabla 1 UNION Tabla 2) -> Las filas que están en una u otra tabla:
- Pepe
- Juan
- Luis

(Tabla 1 INTERSECCION Tabla 2) -> Las filas que están en una y en otra tabla (en ambas):
- Pepe
En línea

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

Desconectado Desconectado

Mensajes: 49


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

La unión es como el "o" de toda la vida. Si usases una unión obtendrías: los proveedores que suministran artículos rojos o verdes.
La intersección es como la "y" de toda la vida. Si usas la intersección obtienes: los proveedores que suministran artículos rojos y verdes.

Código:
Tabla 1:
- Pepe
- Juan

Tabla 2:
- Pepe
- Luis

(Tabla 1 UNION Tabla 2) -> Las filas que están en una u otra tabla:
- Pepe
- Juan
- Luis

(Tabla 1 INTERSECCION Tabla 2) -> Las filas que están en una y en otra tabla (en ambas):
- Pepe
De acuerdo, muchísimas gracias.
En línea

rubcr

Desconectado Desconectado

Mensajes: 49


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

La unión es como el "o" de toda la vida. Si usases una unión obtendrías: los proveedores que suministran artículos rojos o verdes.
La intersección es como la "y" de toda la vida. Si usas la intersección obtienes: los proveedores que suministran artículos rojos y verdes.

Código:
Tabla 1:
- Pepe
- Juan

Tabla 2:
- Pepe
- Luis

(Tabla 1 UNION Tabla 2) -> Las filas que están en una u otra tabla:
- Pepe
- Juan
- Luis

(Tabla 1 INTERSECCION Tabla 2) -> Las filas que están en una y en otra tabla (en ambas):
- Pepe

Buenas tardes, perdona que te moleste.
Tengo un ejercicio nuevo pero le tengo resuelto ya, el apartado a creo que está bien pero en los demás dudo por los natural join y no se como aplicarlos muy bien.
El ejer es el siguiente:

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”.

Mis soluciones son:
a)Pi(CodPeticion) (Sigma(grado = 7) (peticiones))

b)(Pi(CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (π (CodPeticion) Sigma (Grado = 7) (Peticiones)) ∗ Recibe)

c)Pi(CodEquipo) (BOMBEROS * ((CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (Pi(CodPeticion) Sigma(Grado = 7) (Peticiones)) ∗ Recibe))

d)Pi(Nombre) (Bombero * ((CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (Pi(CodPeticion)Sigma(Grado = 7) (Peticiones)) ∗ Recibe))


« Última modificación: 18 Abril 2020, 15:57 pm por rubcr » En línea

K-YreX


Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Ejer Alg relacional
« Respuesta #19 en: 18 Abril 2020, 16:57 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”.

Mis soluciones son:
a)Pi(CodPeticion) (Sigma(grado = 7) (peticiones))

b)(Pi(CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (π (CodPeticion) Sigma (Grado = 7) (Peticiones)) ∗ Recibe)

c)Pi(CodEquipo) (BOMBEROS * ((CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (Pi(CodPeticion) Sigma(Grado = 7) (Peticiones)) ∗ Recibe))

d)Pi(Nombre) (Bombero * ((CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (Pi(CodPeticion)Sigma(Grado = 7) (Peticiones)) ∗ Recibe))
  • 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.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
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,647 Último mensaje 15 Agosto 2004, 12:50 pm
por soplo
ayuda con mi modelo relacional
Bases de Datos
lokito1986 0 3,511 Último mensaje 3 Septiembre 2010, 02:36 am
por lokito1986
Duda con modelo relacional
Bases de Datos
Psyke1 4 2,527 Último mensaje 23 Agosto 2012, 12:49 pm
por Psyke1
Consultas en Álgebra Relacional
Bases de Datos
Emerson07 0 867 Último mensaje 8 Noviembre 2015, 23:01 pm
por Emerson07
Algebra relacional
Bases de Datos
piete2 0 427 Último mensaje 6 Mayo 2018, 20:12 pm
por piete2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines