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

Duda entidad-relacion: ¿ Relacion reflexiva o multiple ?

Estas en el tema de Duda entidad-relacion: ¿ Relacion reflexiva o multiple ? en el foro de Bases de Datos General en Foros del Web. Saludos, estoy realizando el modelo entidad relacion de una pequeña de base de datos que gestiona una asociacion sin animo de lucro. La base de ...
  #1 (permalink)  
Antiguo 01/07/2013, 02:53
 
Fecha de Ingreso: julio-2013
Mensajes: 1
Antigüedad: 10 años, 10 meses
Puntos: 0
Duda entidad-relacion: ¿ Relacion reflexiva o multiple ?

Saludos,

estoy realizando el modelo entidad relacion de una pequeña de base de datos que gestiona una asociacion sin animo de lucro. La base de datos se creara en ACCESS 2007.

Mi problema reside en que existen dos entidades, una es SOCIOS y la otra ACTIVIDADES.

Los SOCIOS realizan ACTIVIDADES, pero tambien algunos de los SOCIOS son responsables de dichas ACTIVIDADES. Entendiendose responsables por coordinadores de las mismas.


Al ser una de mis primeras bases de datos me encuentro sumamente desconcertardo sobre como afrontar esa realacion multiple o tal vez sea una realacion reflexiva.

Gracias.
  #2 (permalink)  
Antiguo 03/07/2013, 10:34
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda entidad-relacion: ¿ Relacion reflexiva o multiple ?

Hola suxor:

Hay varias alternativas para este escenario, dependiendo de tu lógica de negocio. Veamos algunos hechos...

En primer lugar, si TODAS las actividades deben tener asignadas un RESPONSABLE y ese responsable tiene que ser un socio, entonces basta con que agregues una Llave Foránea a tu tabla de actividades hacia la tabla de socios, es decir, tendrías tu información más o menos asi:

Código SQL:
Ver original
  1. SELECT * FROM socios;
  2. +----------+--------------+
  3. | id_socio | nombre_socio |
  4. +----------+--------------+
  5. |        1 | socio 1      |
  6. |        2 | socio 2      |
  7. |        3 | socio 3      |
  8. +----------+--------------+
  9.  
  10. SELECT * FROM actividades;
  11. +--------------+----------+------------------+
  12. | id_actividad | id_socio | nombre_actividad |
  13. +--------------+----------+------------------+
  14. |            1 |        3 | actividad 1      |
  15. |            2 |        1 | actividad 2      |
  16. |            3 |        2 | actividad 3      |
  17. +--------------+----------+------------------+
  18.  
  19. SELECT a.id_actividad, a.nombre_actividad, s.nombre_socio AS responsable
  20. FROM actividades a
  21. INNER JOIN socios s ON a.id_socio = s.id_socio
  22. ORDER BY a.id_actividad;
  23. +--------------+------------------+-------------+
  24. | id_actividad | nombre_actividad | responsable |
  25. +--------------+------------------+-------------+
  26. |            1 | actividad 1      | socio 3     |
  27. |            2 | actividad 2      | socio 1     |
  28. |            3 | actividad 3      | socio 2     |
  29. +--------------+------------------+-------------+

Ahora bien, si no todas las actividades deben tener asignado un responsable, entonces lo que tienes que hacer es crear una tabla adicional que relaciones las actividades que si tienen responsables, incluyendo las llaves foráneas hacia la actividad y el socio, es decir, algo como esto:

Código SQL:
Ver original
  1. SELECT * FROM socios;
  2. +----------+--------------+
  3. | id_socio | nombre_socio |
  4. +----------+--------------+
  5. |        1 | socio 1      |
  6. |        2 | socio 2      |
  7. |        3 | socio 3      |
  8. +----------+--------------+
  9.  
  10. SELECT * FROM actividades;
  11. +--------------+------------------+
  12. | id_actividad | nombre_actividad |
  13. +--------------+------------------+
  14. |            1 | actividad 1      |
  15. |            2 | actividad 2      |
  16. |            3 | actividad 3      |
  17. +--------------+------------------+
  18.  
  19. SELECT * FROM socios_actividades;
  20. +--------------------+--------------+----------+
  21. | id_actividad_socio | id_actividad | id_socio |
  22. +--------------------+--------------+----------+
  23. |                  1 |            1 |        3 |
  24. |                  2 |            3 |        2 |
  25. +--------------------+--------------+----------+
  26.  
  27. SELECT a.id_actividad, a.nombre_actividad, s.nombre_socio AS responsable
  28. FROM actividades AS a
  29. LEFT JOIN socios_actividades AS sa ON sa.id_actividad = a.id_actividad
  30. LEFT JOIN socios AS s ON sa.id_socio = s.id_socio
  31. ORDER BY a.id_actividad;
  32. +--------------+------------------+-------------+
  33. | id_actividad | nombre_actividad | responsable |
  34. +--------------+------------------+-------------+
  35. |            1 | actividad 1      | socio 3     |
  36. |            2 | actividad 2      | NULL        |
  37. |            3 | actividad 3      | socio 2     |
  38. +--------------+------------------+-------------+

Observa que aquí al actividad 2 no tiene asignada ningún responsable, por esa razón debes utilizar LEFT o RIGTH JOIN...

Dale un vistazo para ver si esto es más o menos lo que querías preguntar.

Saludos
Leo.

Etiquetas: access, relacion
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:52.