Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Ayuda con query con tres tablas relacionadas

Estas en el tema de Ayuda con query con tres tablas relacionadas en el foro de Bases de Datos General en Foros del Web. Supongamos tres tablas tales que: Código: tabla_generica: columna | Descripción ------------+--------------------------------------------------- id_registro | Identificador del registro fecha | Fecha del guardado del registro tabla_especifica: columna ...
  #1 (permalink)  
Antiguo 04/03/2010, 19:14
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 3 meses
Puntos: 36
Ayuda con query con tres tablas relacionadas

Supongamos tres tablas tales que:

Código:
tabla_generica:
  columna   |   Descripción
------------+---------------------------------------------------
id_registro | Identificador del registro
fecha       | Fecha del guardado del registro

tabla_especifica:
  columna   |   Descripción
------------+---------------------------------------------------
id_registro | Clave foránea. El dato es el mismo que estaría en tabla_generica
id_entidad1 | Clave foránea a los datos de una primer entidad
id_entidad2 | Clave foránea a los datos de una segunda entidad

tabla_entidad:
  columna   |   Descripción
------------+---------------------------------------------------
id_entidad  | Identificador de entidad
tipo        | Tipo de Entidad
¿Cómo podría saber cuántos registros hay de determinada fecha (dato que está en tabla_generica) donde los tipos de entidad son iguales.


¿Con datos?
Código:
tabla_generica
id_registro | fecha
------------+--------------
     1      | 2010/03/04
     2      | 2010/03/04

tabla_especifica
id_registro | id_entidad1 | id_entidad2
------------+-------------+--------------
     1      |     1       |     2
     2      |     3       |     4

tabla_entidad
id_entidad  | tipo 
------------+-------
     1      |   A
     2      |   B
     3      |   C
     4      |   C 
Lo que necesito es una query que me diga, para determinada fecha, cuántos registros hay donde el tipo de entidad son iguales. En este caso, 1 registro para la fecha 2010/03/04

Cualquier idea, enlace, comentario es agradecido.
__________________
I ♥ The Music!
  #2 (permalink)  
Antiguo 05/03/2010, 07:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda con query con tres tablas relacionadas

Maturano No logro interpretar bien el ejemplo que pones al tener dos fechas iguales.

Estaría utilizando la fecha correspondiente al id_registro 2?

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 05/03/2010, 07:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Ayuda con query con tres tablas relacionadas

Realmente no se entiende la lógica.
- Las entidades están registradas en una tabla
- Otra tabla relaciona entidades de a pares. No se conoce qué relación existe porque la tabla no es indicadora de nada. A su vez, parece tener una PK propia.
- La tabla que guarda las fechas no queda claro si se relaciona con la segunda o no. Lo que es seguro es que no está vinculada directamente con las entidades.

* Si la primera tabla y la segunda comparten PK, y una de ellas es FK de la otra, hacer una tabla para guardar un sólo atributo del que poseen una relación 1:1 no tiene sentido.
* Si no es FK, no hay forma de vincular la fecha con las entidades.
* Si es FK, entonces hay dos formas de almacenar las FK de las entidades: (1, 2) y (2, 1), por lo cual se puede llegar a agrupar pares distintos para el mismo día (el orden de los facores si altera el producto en este caso).

Tip: Si estás poniendo una representación genérica, no sirve para tu caso, porque lo que requieres es una consulta específica.

Postea estructuras más cercanas al modelo real, y con nombres verdaderamente representativos de lo que son, porque el ejemplo no es funcional para tu pregunta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 05/03/2010, 15:13
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 14 años, 3 meses
Puntos: 36
Respuesta: Ayuda con query con tres tablas relacionadas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
- La tabla que guarda las fechas no queda claro si se relaciona con la segunda o no. Lo que es seguro es que no está vinculada directamente con las entidades.
Sí está relacionada. La segunda tabla, que llamé tabla_especifica, es como un puente que relaciona a tabla_general con --en este caso-- dos entidades.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
* Si la primera tabla y la segunda comparten PK, y una de ellas es FK de la otra, hacer una tabla para guardar un sólo atributo del que poseen una relación 1:1 no tiene sentido.
Lo sé , pero este es un caso muy simplificado. En realidad hay más situaciones específicas con información particular para cada una. Se tiene una tabla para cada caso.

Solo para que lo puedas ver mejor, digamos que a la par de tabla_especifica, también tengo otra tabla como sigue:
Código:
tabla_especifica:
  columna   |   Descripción
------------+---------------------------------------------------
id_registro | Clave foránea. El dato es el mismo que estaría en tabla_generica
id_entidad1 | Clave foránea a los datos de una primer entidad
id_entidad2 | Clave foránea a los datos de una segunda entidad
algun_dato  | Particular para este determinado caso.

tabla_especifica2:
   columna      |   Descripción
----------------+---------------------------------------------------
id_registro     | Clave foránea. El dato es el mismo que estaría en tabla_generica
id_entidad      | Quizá este caso solo tiene una entidad
algun_otro_dato | Muy particular para este caso
....
... y otro campo en tabla_generica para saber qué tipo de caso específico es.Entonces, con datos, podemos tener algo como:

Código:
tabla_generica
id_registro |  fecha     | tipo_caso
------------+------------+------------
     1      | 2010/03/04 | caso_especifico
     2      | 2010/03/04 | caso_especifico
     3      | 2010/03/04 | caso_especifico_2
     4      | 2010/03/04 | caso_especifico
     5      | 2010/03/05 | caso_especifico_2
     6      | 2010/03/05 | caso_especifico_2
     7      | 2010/03/05 | caso_especifico
     8      | 2010/03/05 | caso_especifico_2
     9      | 2010/03/05 | caso_especifico
    10      | 2010/03/05 | caso_especifico

tabla_especifica
id_registro | id_entidad1 | id_entidad2 | algun_dato
------------+-------------+-------------+-----------
     1      |     1       |      2      | xxxxxxxxxx
     2      |     3       |      4      | xxxxxxxxxx
     4      |     6       |      7      | xxxxxxxxxx
     7      |    10       |     11      | xxxxxxxxxx
     9      |    13       |     14      | xxxxxxxxxx
    10      |    15       |     16      | xxxxxxxxxx

tabla_especifica2
id_registro | id_entidad | algun_otro_dato
------------+------------+-----------------
     3      |       5    | yyyyyyyyyy
     5      |       8    | yyyyyyyyyy
     6      |       9    | yyyyyyyyyy
     8      |      12    | yyyyyyyyyy

tabla_entidad
id_entidad  | tipo 
------------+-------
     1      |   A
     2      |   B
     3      |   C
     4      |   C
     5      |   C
     6      |   B
     7      |   B
     8      |   A
     9      |   B
    10      |   C
    11      |   A
    12      |   C
    13      |   B
    14      |   C
    15      |   B
    16      |   B 
La base no la diseñé yo, pero creo está bien diseñada. Espero con esta información tenga más lógica en cuanto a su razón de ser.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
* Si no es FK, no hay forma de vincular la fecha con las entidades.
tabla_generica y tabla_entidad tienen sus propias pks, tabla_especifica comparte pk con tabla_generica y tiene fks hacia tabla_entidad. A menos que me equivoque, pero así lo entiendo. La descripción de la tabla me dice que:
Código:
tabla_generica
    Índices:
        «pk_registro» PRIMARY KEY, btree (id_registro)

tabla_especifica
    Índices:
        «especifico_pkey» PRIMARY KEY, btree (id_registro)
        «fki_reg_ida» btree (id_registro)
    Restricciones de llave foránea:
        «fk_reg_ida» FOREIGN KEY (id_registro) REFERENCES tabla_generica(id_registro) ON UPDATE CASCADE ON DELETE RESTRICT
        «fk_reg_identidad1» FOREIGN KEY (id_entidad1) REFERENCES tabla_entidad(id_entidad) ON UPDATE CASCADE ON DELETE RESTRICT
        «fk_reg_identidad2» FOREIGN KEY (id_entidad2) REFERENCES tabla_entidad(id_entidad) ON UPDATE CASCADE ON DELETE RESTRICT

tabla_entidad
    Índices:
        «pk_entidad» PRIMARY KEY, btree (id_entidad)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tip: Si estás poniendo una representación genérica, no sirve para tu caso, porque lo que requieres es una consulta específica.

Postea estructuras más cercanas al modelo real, y con nombres verdaderamente representativos de lo que son, porque el ejemplo no es funcional para tu pregunta.
Hay muchas más tablas en la base de datos y las columnas de las tablas tienen algunos nombres desafortunados (en eso sí creo hubo un mal diseño, con abreviaciones y a la vez nombres largos; ejemplo: fk_fecha_reg_sndx_nombre. Lo que intento hacer es plantear una representación simplificada para una consulta específica, creo colocar más información solo causaría ruido innecesario, la pregunta que quiero responder es simple: ¿Cuántos casos específicos hubo para X fecha donde las entidades son del mismo tipo?.

Según los datos de ejemplo que coloco, la respuesta sería:
- 2 para el 04/03/2010
- 1 para el 05/03/2010


Cita:
Iniciado por huesos52 Ver Mensaje
Maturano No logro interpretar bien el ejemplo que pones al tener dos fechas iguales.
La fecha fue igual intencionalmente para que se vea que el enfoque es hacia el tipo de entidad.

Entidades y registros (las tablas donde se aplican las condiciones) están relacionadas por medio de otra tabla.

Tristemente me he dado cuenta que no sé como hacer esta consulta. Espero igual les parezca un ejercicio interesante
__________________
I ♥ The Music!

Última edición por maturano; 05/03/2010 a las 15:22

Etiquetas: query, relaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:21.