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 ;)
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
Citarselect *
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
Gracias! =)
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
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.
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!!
CitarHola! 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
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