Título: Relaciones entre tablas Publicado por: Tlecoatl en 23 Abril 2011, 06:17 am Hola! hace un poco tiempo unos me comentaron que para hacer una relacion de uno a muchos se podria utilizar una tabla intermedia basada en los ids de las tablas a relacionar:
La tabla cliente se relaciona con la tabla telefono con la llave foranea de esta. En el ejemplo que me exponian estas tablas se relacionaban con una tercera... CLIENTE con su id--------------TABLA INTERMEDIA con dos columnas ID CLIENTE y ID TELEFONO-----------------------y la tabla TELEFONO con su id... me comentaron que esto permitia hacer consultas un poco mas rapido...pero aun no termino de comprenderlo..... Si alguien me pudiera explicar, o poner un ejemplo lo agreadeceria mucho. Gracias ;) Título: Re: Relaciones entre tablas Publicado por: Kase en 23 Abril 2011, 09:05 am consultas mas rapido no
si tienes los sig cliente 60 datos telefono 120 datos telefonocliente 100 datos un select * from cliente, telefono,telefono cliente tendria que multiplicar 60 x 120 x 100 si tubieras solo cliente 60 telefono 60 tendrias que multiplicar solo 60 x 60 la diferencia es que el primer modelo te permite que un cliente tenga varios telefonos o varios clientes tengan un solo telefono el segundo modelo te limita dependiendo de donde esta la clave foranea : por ejemplo si la clave foranea esta en telefono, un telefono acepta un cliente, pero un cliente puede tener varios telefonos, y alrreves con la clave foranea en cliente, un cliente solo puede tener un telefono pero un telefono puede tener varios clientes asi que no te complikes la existencia y usa el primer modelo telefono x cliente x telefonocliente donde telefono {idtelefono primary key, mas datos} cliente {idcliente primarykey, mas datos} telefonocliente{idtelefono clave foranea, idcliente clave foranea} y la consulta te keda algo asi como Citar select * from telefono, cliente, telefonocliente where telefono.idtelefono = telefonocliente.idtelefono and cliente.idcliente = telefonocliente.idcliente si no recuerdo mal, puede expresar un natural join si tienen los mismos nombres. pero asi como te lo exprece no puedes errarle.. y es posible optimizar consultas con consultas anidadas =p eso me lo enseño un maestro que tiene doctorado en bases de datos pero no es para mortales Título: Re: Relaciones entre tablas Publicado por: Tlecoatl en 23 Abril 2011, 18:51 pm Gracias! =)
Título: Re: Relaciones entre tablas Publicado por: Novlucker en 23 Abril 2011, 19:25 pm La pregunta es, ¿tendrás teléfonos que no serán de clientes? Porque si la respuesta es no, entonces tendrás dos tablas y no tres
Por otra parte, muchos desaconsejan el uso de NATURAL JOINS, ya que sin querer puedes terminar con el producto cartesiano de las tablas Saludos Título: Re: Relaciones entre tablas Publicado por: cassiani en 23 Abril 2011, 19:35 pm Buena explicación la de Kase, esa tabla intermedia lo que te permite es crear una relacion de muchos a muchos entre las dos tablas.
No es necesaria la tabla intermedia si rigurosamente tu caso es: muchos clientes comparten un mismo número de telefono.. o muchos números de teléfonos seran usados por un mismo cliente. Si el caso es que muchos clientes pueden usar diferentes números de teléfonos, ya la relación sería de muchos a muchos. Título: Re: Relaciones entre tablas Publicado por: [u]nsigned en 27 Abril 2011, 17:44 pm No se si viene la caso, pero por que no agregar 'telefono' como un campo a la tabla cliente? :P
Si la relacion es 1:1 simplemente declaras el campo 'telefono' como UNIQUE. Saludos!! Título: Re: Relaciones entre tablas Publicado por: Novlucker en 27 Abril 2011, 19:34 pm Citar Hola! hace un poco tiempo unos me comentaron que para hacer una relacion de uno a muchos se podria utilizar una tabla intermedia basada en los ids de las tablas a relacionar: Saludos Título: Re: Relaciones entre tablas Publicado por: Nakp en 30 Abril 2011, 22:20 pm eh? de uno a muchos con una tabla extra? eso es de muchos a muchos como si un cliente tuviese varios telefonos y un telefono le perteneciera a varios clientes :P asi que no :xD te han engañado jaja
|