Bueno, la idea es que la PK de cada una de esas tablas
esté compuesta en cada caso por la PK de la persona, más un campo que pueda identificarlos univocamente. En el caso de teléfonos sería la PK de la persona + telefono, porque jamás la misma persona podría aparecer con el mismo teléfono dos veces; y lo mismo en el caso del e-Mail.
Al mismo tiempo, la
PK de la persona es una
FK que debe referenciar a la tabla donde se guardan los datos de la persona.
Te comento que por cuestiones de mnemotécnica, siempre es conveniente que
el nombre de las tablas tenga una consistencia semántica. Así, por ejemplo, una tabla que guarde la INSCRIPCION no debería ser una tabla donde se guarden datos de una PERSONA, un ALUMNO o un PROFESOR. Esas serían otras tablas; Inscripción debería ser la que contiene el ID de la persona que se inscribe
y los detalles que hacen al acto de inscripción, no los que identifican a la persona.
El respeto a una sintaxis consistente ayuda muchas veces a ubicarse rápidamente cuál es la tabla que uno necesita,
sin tener que para ello mirar los nombres de sus campos...
Volviendo al tema: Por definición de bases de datos, un campo sólo puede tener un valor en un instante dado. En ese contexto, un campo ENUM sirve para predefinir un conjunto de valores que el campo puede tomar (restricción de dominio), pero solamente puede tener uno a la vez.
Cualquier circunstancia en la que una misma instancia de entidad (digamos, una persona) tenga un atributo que puede tomar
simultáneamente más de un
valor, implica necesariamente
la existencia de una relación nueva en donde cada uno de esos valores
está representado por un registro distinto de la nueva tabla.
Jamás puede darse que existan atributos multivaluados (más de un valor al mismo tiempo). Eso es parte de la
1FN.
Mi sugerencia de usar n campo ENUM es porque tienes un conjunto muy acotado de opciones invariables. Si estas opciones pudiesen variar en el tiempo, entonces ese campo sería la FK de una tabla que conserve la descripción del tipo.
Cita: Cuando haces el REFERENCES contacto(idcontacto) que es "contacto"??
Es un error de escritura. Quería referirme a la tabla donde está la persona.