Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/04/2011, 09:31
Avatar de pancho_k
pancho_k
 
Fecha de Ingreso: julio-2007
Mensajes: 32
Antigüedad: 16 años, 9 meses
Puntos: 4
Pregunta Distintas llaves foráneas en el mismo campo?

Antes que nada un cordial saludo y entremos directamente en materia.

En varias ocasiones me he visto en la necesidad de ligar varias tablas a una sola ( A, B, C ligarla a la tabla D ), pongamos el típico ejemplo y posiblemente muchos se vean identificados.

Supongamos que tenemos las tablas EMPLEADOS, PROVEEDORES y CLIENTES ( también debo comunicarles que en esto de MySQL soy mas autodidacta y tengo muy pocas y escasas referencias del correcto uso y manejo de esta tecnología ), también tenemos la tabla TELEFONOS que aunque podemos agregar uno o varios capos para varios teléfonos a las tablas anteriores, las reglas de normalización dictan que es mejor crear una tabla independiente en donde almacenemos los teléfonos para todos ( o al menos así lo he entendido yo) y ligarlas a través de una llave foránea, en el caso de que unicamente tengamos las tablas EMPLEADOS y TELEFONOS no le veo ningún problema, ya que la llave primaria del empleado se almacenaría en la tabla TELEFONOS n número de veces según el n numero de teléfonos tenga el empleado como una llave foránea.

Ahora, que pasa si queremos almacenar los teléfonos de los EMPLEADOS, PROVEEDORES y de los CLIENTES?

- Crear una tabla de teléfonos para cada tipo de persona se me hace demasiado redundante.
- Crear una llave foránea para cada tipo de persona en la tabla TELEFONOS no se puede.

Mi primer pregunta es ¿QUE SE HACE EN ESTOS CASOS?

Lo que normalmente hago es agregar un campo tipo_propietario a la tabla TELEFONOS para identificar a quien corresponde ese teléfono ( si es de un empleado, de un cliente o de un proveedor ) y en otro campo que no es ni llave foránea ni es indice y no tiene ninguna propiedad especial almaceno el id o la llave primaria de la persona a la que le corresponde ese teléfono, obviamente esto lo hago a nivel programación y con mucho cuidado para garantizar la consistencia de los datos.

Mis siguientes preguntas son:

¿Mi forma de resolverlo es una buena o mala practica?
¿Existe algún tipo de relación en MySQL que me permita resolver este problema, cual es?
¿Cual es la manera correcta de resolverlo?

Me eche un clavado en las FAQ's y unicamente encontré un tema que habla mas o menos del mismo problema ( http://www.forosdelweb.com/f21/dudas-como-ligar-tablas-mysql-301016/ ), pero la respuesta, mas que respuesta es otra pregunta y pues la verdad no convence.

De antemano agradezco la atención prestada y ojala puedan ayudarme con mis dudas.

P.D.: Se agradecen links a artículos o referencias para evitarles dar toda una explicación.