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

Referenciar más de una tabla con claves foráneas

Estas en el tema de Referenciar más de una tabla con claves foráneas en el foro de Mysql en Foros del Web. Hola amigos, estoy desarrollando una base de datos en la que tengo dos tablas (farmacias y medicos) que a efectos funcionales se comportan igual, es ...
  #1 (permalink)  
Antiguo 11/09/2008, 09:42
 
Fecha de Ingreso: septiembre-2008
Mensajes: 1
Antigüedad: 15 años, 7 meses
Puntos: 0
Referenciar más de una tabla con claves foráneas

Hola amigos, estoy desarrollando una base de datos en la que tengo dos tablas (farmacias y medicos) que a efectos funcionales se comportan igual, es decir, es como si fuesen objetos sobre los que se hace la misma función pero que contienen datos distintos. Voy a explicarlo mejor:

[Medicos]
- INTEGER id (Clave primaria)
- INTEGER idTabla (para identificar la entidad, por defecto todos los registros tienen como valor un 1)
- ... (más campos)

[Farmacias]
- INTEGER id (Clave primaria)
- INTEGER idTabla (para identificar la entidad, por defecto todos los registros tienen como valor un 2)
- ...(más campos, distintos a los de la tabla anterior)

Existe otra tabla en la que se relaciona indistintamente medicos y farmacias con una ruta que debe seguirse, es decir, yo sigo una ruta prefijada en la que me encontraré con médicos o farmacias. Os la muestro:

[AsocRutas]
- INTEGER idTabla (se refiere a la tabla donde cojo la entidad, o bien medicos o bien farmacias, 1 = medicos, 2 = farmacias)
- INTEGER idEntidad (se refiere, dentro de farmacias o medicos, a la entidad que está dentro de la ruta, campo id dentro de farmacias o medicos)
- INTEGER idRuta (se refiere a una ruta en particular ya creada en otra tabla)
- INTEGER orden (orden dentro de una ruta en particular)
Clave primaria (idTabla,idEntidad,idRuta), con esto sabemos qué farmacia o médico (idTabla, idEntidad) se refiere a qué Ruta (idRuta).

El caso es que un médico o farmacia puede estar en varias rutas, con un orden determinado que no puede repetirse. El problema es el siguiente, idTabla e idEntidad son claves foráneas que identifican 1) La tabla donde está la entidad (medico o farmacia) y 2) El id de la entidad dentro de esa tabla. Lo que yo quiero hacer aquí, y que no puedo es crear una clave foránea compuesta por estos dos (idTabla e idEntidad) que referencien a [Farmacias] y a [Médicos]. Oséase, que quiero que esté hecho de tal manera que si se borra un médico o farmacia con un idTabla e idEntidad determinados se consiga borrar su asociación de ruta en [AsocRutas]. Por integridad referencial, al referirse a más de una tabla la clave foránea da error.

¿IDEAS? ¿CÓMO SE PUEDE ARREGLAR ESTO? Muchas gracias amigos.

PD: he pensado en juntar en una misma tabla médicos y farmacias, pero el hecho de que tengan campos distintos haría que la mayor parte de las veces los registros estuvieran prácticamente vacíos por no utilizar más de la mitad de los campos de cada registro.
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 11:44.