Cuando estás pregundando sobre relaciones N a N, estás entrando más en los fundamentos de las bases de datos, que en los motores de bases de datos en sí, por lo que el tema, si bien es base de nuestro trabajo, su desconocimiento pone en evidencia falta de conocimientos ni siquiera informales sobre el asunto.
Si pretender con lo anterior menoscabar tu ego u ofender (perdona si fue demasiado brutal), trataré de resumir de alguna forma lo que estás preguntando, pero te advierto que es algo abstracto e impica el conocer VARIAS cosas antes de ello.
Relaciones N a N refieren a la cardinalidad de las relaciones entre entidades según el modelo Entidad-Relación propuesto por Teory, Fry y Yang en 1986, cuyo paper puedes descargar de
http://www.fe.up.pt/~jmoreira/wwwsi/2000-01/eerm.pdf. En el se describen qué son las entidades, cómo se clasifican, qué son las relaciones y cuáles son sus propiedades.
En este sentido la pregunta está en niveles muy básicos de Base de Datos.
Respecto de las N a N y la cardianlidad entre relaciones, ésta se considera:
- 1 a 1, cuando a cada instancia de la entidad E1 corresponde una y sólo una instancia de la E2.
- 1 a N, cuando a cada instancia de la entidad E1 puede corresponder de 0 a N de la E2, y a su vez N instancias de la E2 se relacionan con solo una de E1.
- N a N, cuando de 0 a N instancias de la entidad E1 puede corresponder de 0 a N de la E2.
Este galimatías afecta el desarrollo de las bases de datos a nivel modelo físico, porque tienen directa implicancia en la definición de las claves primarias, foráneas y restricciones de dependencias, normalizaciones y determinantes.
Para acercarte a una visión muy parcializada, piensa esto: Considerando que las entidades sean las tablas de la base (no es totalmente así en el modelo E-R, pero es parte de eso), ¿cómo haces para que un sólo registro de una tabla T1 se vincule a varios de la tabla T2? Simple: Poniendo una clave externa en T2 que sea clave primaria en T1.
Pensarás, por ejemplo: "Bueno, simplemente le AGREGO un valor numérico a la tabla T1 y otro a T2 y listo...".
No. No es exactamente así la cosa.
En primer lugar porque el diseño en ese nivel (E-R) no es arbitrario. No estás programando bases de datos en ese momento, estás modelado un sistema real que estás analizando, ya que estás haciendo las funciones de Analista de Sistemas.
En segundo lugar, porque todavía falta mucho para llegar al SQL.
Cuando estás en ese nivel recién estás analizando qué conjunto de datos determina que existe una relación entre una entidad llamada CLIENTES, con otra entidad llamada CONTRATOS. ¿Qué lo determina? ¿Cuándo empieza a existir el cliente?: ¿Cuando hace una cita? ¿Cuando pide una reserva, cuando la paga, cuando la seña? ¿Y si cancela antes de la seña, es un cliente o no? ¿La existencia del cliente hace que la existencia del contrato sea mandatoria o no? ¿Cuando se inicia y cuándo se extingue el contrato? Y así se puede seguir casi hasta el infinito... o hasta que el analista tenga claro cómo debe crearse el esquema inicial (denominado DER o Diagrama Entidad - Relación) que es el primer paso para la construcción de una base de datos... Algo así como 2 a 18 meses antes de comenzar a programar (no estoy exagerando, en el proyecto en que estoy empezamos el análisis el 03/2007 y recién empezamos a implementar la base a partir del 07/2007... y todavía recibimos ajustes al modelo de tanto en tanto).
Con esto quiero decirte que si bien el tema de las relaciones N a N se reflejará finalmente en la construcción de la base física, es un tema de conceptualizaciones de análisis y no de SQL, por eso los post anteriores que no resolvieron tu duda.
Sugerencias:
- Ullman/Widom . "Introducción a los sistemas de bases de datos" - Ed. Prentice Hall
- Mendelzon/Ale. "Introducción a las bases de datos relacionales" - Ed. Prentice Hall
- H. F. Korth y A. Silberschatz. "Fundamentos de Bases de Datos". - Ed. Mc Graw Hill
- C. J. Date. "Introducción a los Sistemas de Bases de Datos" - Ed. Addison Wesley
Como punto final, las relaciones N a N, al estar en el fundamento de Análisis de Sistemas y no ser específicos de Bases de Datos, aparecen en varios puntos de la ingenería de sistemas. Incluso vas a encontrar el concepto en POO (que trabajas si haces PHP en POO). Y es esencialmente lo mismo.